解法:利用单调双向链表,来获得区间内的最大值。
晚进队列的值决定了到此之前队列的下限。按照先入队列的顺序,不断提高下限。
public static void main(String[] args) {
int [] arr= {1,2,3};
System.out.println(arr.length);
int[] nums = {1,3,-1,-3,5,3,6,7};
int[] res = maxSlidingWindow(nums, 3);
}
public static int[] maxSlidingWindow(int[] nums, int k) {
if(k<=0) return null;
if(k ==1) return nums;
if(nums == null || nums.length== 0)return new int[0];
if(k >= nums.length) {
int max = Integer.MIN_VALUE;
for(int i : nums){
max = Math.max(max, i);
}
return new int[]{max};
}
int[] res = new int[nums.length-k +1];
int index = 0;
T59_MaxQueue.MaxQueue maxQueue = new T59_MaxQueue.MaxQueue();
for(int i = 0 ; i < nums.length; i ++){
if(i <k){
maxQueue.push_back(nums[i]);
}else {
res[index++] = maxQueue.max_value();
maxQueue.pop_front();
maxQueue.push_back(nums[i]);
}
}
res[index] = maxQueue.max_value();
return res;
}