力扣上有习题,可做,我当时自己想两个循环,时间复杂度 很高,然后思路使用双端队列,就还挺简单的,直接上代码吧
import java.util.LinkedList;
class Solution {
public int[] maxSlidingWindow(int[] nums, int k) {
if(nums == null || k ==0 || nums.length < k ){
return null;
}
LinkedList<Integer> q = new LinkedList<>();
int[] res = new int[nums.length-k+1];
int index = 0;
for(int i = 0; i < nums.length; i++){
while(!q.isEmpty() && nums[i] >= nums[q.peekLast()]){
q.pollLast();
}
q.addLast(i);
if(q.peekFirst() == i-k){
q.pollFirst();
}
if(i >= k-1){
res[index++] = nums[q.peekFirst()];
}
}
return res;
}
}