原题地址:https://leetcode.com/problems/min-stack/
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) — 将元素 x 推入栈中。
pop() — 删除栈顶的元素。
top() — 获取栈顶元素。
getMin() — 检索栈中的最小元素。
原题地址:https://leetcode.com/problems/min-stack/
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。
push(x) — 将元素 x 推入栈中。
pop() — 删除栈顶的元素。
top() — 获取栈顶元素。
getMin() — 检索栈中的最小元素。
原题地址:https://leetcode.com/problems/kth-largest-element-in-a-stream/
设计一个类寻找一个数据流里面的第k大的元素。注意是指排序后的第k大元素,而不是第k个不重复元素。
你的KthLargest类应该有一个构建器接受一个整数k和一个整数数组nums,包含流的初始元素。每次调用方法KthLargest.add,返回流里面的第k大的元素。
例子:
int k = 3; int[] arr = [4,5,8,2]; KthLargest kthLargest = new KthLargest(3, arr); kthLargest.add(3); // returns 4 kthLargest.add(5); // returns 5 kthLargest.add(10); // returns 5 kthLargest.add(9); // returns 8 kthLargest.add(4); // returns 8
注意:
你可以假定nums的长度 ≥ k-1 而且 k ≥ 1。
原题地址:https://leetcode.com/problems/kth-smallest-element-in-a-sorted-matrix/
给定一个n x n的矩阵,每一行,每一列都是正序排列,寻找矩阵内的第k小元素。注意是指排序后的第k大元素,而不是第k个不重复元素。
例如:
matrix =
[ [ 1, 5, 9],
[10, 11, 13],
[12, 13, 15] ],
k = 8,
返回 13.
注意,你可以假定k永远合法,1 ≤ k ≤ n2。
注意,算法和数据结构里面的堆(Heap)和内存分配里面的堆(Heap)并不是一个概念。内存分配里面的堆的概念更类似于池(Pool)。Stackoverflow上有一个讨论,我们就不细究了。知道我们这里讨论的是算法和数据结构里面的堆就好了。我还是按照《算法导论》的介绍来进行。
所谓堆,就是一个用一维数组来表示一个完全二叉树的这么一个数据结构。所谓二叉树就是一种树,每一个父节点,有最多两个子节点,一般叫做左右子树。