题解 | #滑动窗口的最大值#
滑动窗口的最大值
http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788
import java.util.*;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size) {
for(int i = 0;i<size;i++){
queue.add(new int[]{num[i],i});
}
list.add(queue.peek()[0]);
for(int i = size;i<num.length;i++){
queue.poll();
}
list.add(queue.peek()[0]);
}
return list;
}
}
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size) {
ArrayList<Integer> list = new ArrayList<>();
//放入值和该值得下标
PriorityQueue<int[]> queue = new PriorityQueue<>((x,y)->(y[0]-x[0]));for(int i = 0;i<size;i++){
queue.add(new int[]{num[i],i});
}
list.add(queue.peek()[0]);
for(int i = size;i<num.length;i++){
queue.add(new int[]{num[i],i});
//若堆顶不在窗口内,则一直弹出
while(queue.peek()[1]<=(i-size)){queue.poll();
}
list.add(queue.peek()[0]);
}
return list;
}
}
查看17道真题和解析