题解 | #滑动窗口的最大值#
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判断就好了,不要想着把特殊的拿出外面,然后之前循环里统一状态(虽然也行,但是逻辑不集中,且如果循环里有其他条件判断是复用的,抽出来要重复写)