滑动窗口最大值
原题:力扣239.
public int[] maxSlidingWindow(int[] nums, int k) {
int n = nums.length;
// 大小相等就比较索引
// 将数组中的数值和索引一起保存
PriorityQueue<int[]> pq = new PriorityQueue<int[]>(new Comparator<int[]>() {
public int compare(int[] pair1, int[] pair2) {
return pair1[0] != pair2[0] ? pair2[0] - pair1[0] : pair2[1] - pair1[1];
}
});
for (int i = 0; i < k; i++) {
pq.offer(new int[]{nums[i], i});
}
// n - k + 1 个最大值
int[] ans = new int[n - k + 1];
ans[0] = pq.peek()[0];
for (int i = k; i < n; i++) {
pq.offer(new int[]{nums[i], i});
// 最大值可能并不在目前的窗口中,所以需要删除
while (pq.peek()[1] <= i - k) {
pq.poll();
}
ans[i - k + 1] = pq.peek()[0];
}
return ans;
}
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤