ID | Title | Difficulty | |
---|---|---|---|
Loading... |
239. Sliding Window Maximum
Hard
LeetCode
Array, Queue, Sliding Window, Heap (Priority Queue), Monotonic Queue
Problem
You are given an array of integers nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can only see the k numbers in the window. Each time the sliding window moves right by one position.
Return the max sliding window.
Example 1:
Input: nums = [1,3,-1,-3,5,3,6,7], k = 3
Output: [3,3,5,5,6,7]
Explanation:
Window position Max
--------------- -----
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
Example 2:
Input: nums = [1], k = 1
Output: [1]
Code
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums == null || nums.length == 0) return new int[0];
Deque<Integer> deque = new LinkedList<>();
int[] res = new int[nums.length - k + 1];
for(int i = 0; i < k; i++){
int num = nums[i];
while(!deque.isEmpty() && nums[deque.peekLast()] <= num){
deque.removeLast();
}
deque.offerLast(i);
}
int start = 0;
for(int i = k; i < nums.length; i++){
res[start] = nums[deque.peekFirst()];
if(deque.peekFirst() == start){
deque.removeFirst();
}
start++;
int num = nums[i];
while(!deque.isEmpty() && nums[deque.peekLast()] <= num){
deque.removeLast();
}
deque.offerLast(i);
}
res[start] = nums[deque.peekFirst()];
return res;
}
}
按 <- 键看上一题!
238. Product of Array Except Self
按 -> 键看下一题!
240. Search a 2D Matrix II