给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。
返回滑动窗口中的最大值。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sliding-window-maximum
public int[] maxSlidingWindow(int[] nums, int k) {
// 建立最大堆
Queue<Integer> max = new PriorityQueue<Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
// TODO Auto-generated method stub
return i2 - i1;
}
});
int n = nums.length;
if (n == 0) {
return nums;
}
int result[] = new int[n - k + 1];
int index = 0;
for (int i = 0; i < n; i++) {
//移除掉第一个元素
if (max.size() >= k) {
max.remove(nums[i - k]);
}
max.offer(nums[i]);
//将下一个元素加入
//更新 result
if (i >= k - 1) {
result[index++] = max.peek();
}
}
return result;
}