import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param num int整型一维数组
* @param size int整型
* @return int整型ArrayList
*/
public ArrayList<Integer> maxInWindows (int[] num, int size) {
// write code here
if(num.length == 0 || size > num.length || size == 0){
return new ArrayList<Integer>();
}
ArrayList<Integer> ans = new ArrayList<>(num.length-size+1);
PriorityQueue<int[]> pq = new PriorityQueue<>((arr1, arr2) ->
arr1[0] != arr2[0] ? arr2[0] - arr1[0] : arr2[1] - arr1[1]
);
for(int i = 0; i < size; i++){
pq.offer(new int[]{num[i], i});
}
ans.add(pq.peek()[0]);
for(int i = size; i < num.length; i++){
pq.offer(new int[]{num[i], i});
while(pq.peek()[1] <= i-size){
pq.poll();
}
ans.add(pq.peek()[0]);
}
return ans;
}
}
使用优先队列,维护最大值,当最大值不在窗口内时出队

京公网安备 11010502036488号