给定一个数组 nums
和滑动窗口的大小 k
,请找出所有滑动窗口里的最大值。
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums.length == 0 || k == 0){
return new int[0];
}
Deque<Integer> deque = new LinkedList<>();
int[] res = new int[nums.length - k + 1];
//i左指针,j右指针
for(int j = 0,i = (1-k);j < nums.length;j++,i++){
//(有k个元素时,队首元素 deque[0]=被删除元素nums[i−1])删除 deque 中对应的 nums[i-1]
//deque.peekFirst() 获取队首元素
if(i > 0 && deque.peekFirst() == nums[i-1]){
deque.removeFirst();
}
//保持deque递减
while( !deque.isEmpty() && deque.peekLast() < nums[j]){
deque.removeLast();
}
deque.addLast(nums[j]);
//记录最大值
if(i >= 0){
res[i] = deque.peekFirst();
}
}
return res;
}
}
执行用时:11 ms, 在所有 Java 提交中击败了74.01%的用户
内存消耗:50.2 MB, 在所有 Java 提交中击败了47.12%的用户
通过测试用例:18 / 18