【LeetCode】【HOT】239. 滑动窗口最大值
package hot;
import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;
public class Solution239 {
public static void main(String[] args) {
int[] nums = {1,3,-1,-3,5,3,6,7};
Solution239 solution = new Solution239();
System.out.println(Arrays.toString(solution.method(nums, 3)));
}
private int[] method(int[] nums, int k){
int n = nums.length;
Deque<Integer> deque = new LinkedList<>();
for(int i = 0; i < k; i++){
while(!deque.isEmpty() && nums[i] >= deque.peekLast()){
deque.pollLast();
}
deque.offerLast(i);
}
int[] ans = new int[n - k + 1];
ans[0] = nums[deque.peekFirst()];
for(int i = k; i < n; i++){
while(!deque.isEmpty() && nums[i] >= deque.peekLast()){
deque.pollLast();
}
deque.offerLast(i);
if(deque.peekFirst() <= i - k){
deque.pollFirst();
}
ans[i - k + 1] = nums[deque.peekFirst()];
}
return ans;
}
}