目录
优先队列(Priority Queue)
小顶堆(Mini Heap)
大顶堆
面试题
703. Kth Largest Element in a Stream
老师的解法:
我的代码:
class KthLargest {
PriorityQueue<Integer> minQ;
int kt;
public KthLargest(int k, int[] nums) {
kt=k;
minQ = new PriorityQueue<Integer>(k, new Comparator<Integer>(){
@Override
public int compare(Integer i1, Integer i2) {
return i1-i2;
}
});
int length = nums.length;
for(int i=0;i<length;i++){
if(minQ.size()<kt){
minQ.add(nums[i]);
}else if(nums[i]>minQ.peek()){
minQ.remove();
minQ.add(nums[i]);
}
}
}
public int add(int val) {
if(minQ.size()<kt){
minQ.add(val);
}else if(val>minQ.peek()){
minQ.remove();
minQ.add(val);
}
return minQ.peek();
}
}
/**
* Your KthLargest object will be instantiated and called as such:
* KthLargest obj = new KthLargest(k, nums);
* int param_1 = obj.add(val);
*/
我的结果:
239. Sliding Window Maximum
我的方法:超时Nlog(k);
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
int length = nums.length;
PriorityQueue<Integer> minQ;
int[] res= new int[length-k+1];
minQ = new PriorityQueue<Integer>(k, new Comparator<Integer>(){
@Override
public int compare(Integer i1, Integer i2) {
return i2-i1;
}
});
int j=0;
for(int i=0;i<length;i++){
if(minQ.size()<k){
minQ.add(nums[i]);
}else{
res[j]=minQ.peek();
j++;
minQ.remove(nums[i-k]);
minQ.add(nums[i]);
}
}
res[j]=minQ.peek();
return res;
}
}
老师的解法O(N)