题解 | #滑动窗口的最大值#
import java.util.*;
public class Solution {
public ArrayList<Integer> maxInWindows(int [] num, int size) {
LinkedList<Integer> queue = new LinkedList<>();
ArrayList<Integer> res = new ArrayList<>();
if(size<=0||size>num.length) return res;
for(int i = 0;i<num.length;i++){
while(queue.size()!=0&&num[queue.getLast()]<num[i]){
queue.pollLast();
}
queue.addLast(i);
while(queue.size()!=0&&queue.peekFirst()<=i-size){
queue.pollFirst();
}
if(i>=size-1){
res.add(num[queue.peek()]);
}
}
return res;
}
}
总结:
1.存数组下标比数组值好,能获取更多信息,比如上面题目里判断队列里元素是否超过窗口大小
2.循环里有特殊的在循环里单独添加if判断就好了,不要想着把特殊的拿出外面,然后之前循环里统一状态(虽然也行,但是逻辑不集中,且如果循环里有其他条件判断是复用的,抽出来要重复写)
正浩创新EcoFlow公司福利 742人发布
