题解 | #滑动窗口的最大值#

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

全部评论

相关推荐

评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务