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

滑动窗口的最大值

http://www.nowcoder.com/practice/1624bc35a45c42c0bc17d17fa0cba788

emm,通过单调队列优化,防止复杂度过高

import java.util.*;
public class Solution {
    public ArrayList<Integer> maxInWindows(int [] num, int size) {
        int[] nums = num;
        int k =size;
        
        Deque<Integer> we = new LinkedList<>();
        //we用于存数组下标
        int[] re = new int[nums.length-k+1];
        ArrayList<Integer> op = new ArrayList<>();
        if(k == 0 || nums.length == 0 || nums.length < k){
            return op;
        }
        for(int i =0;i<k;i++){
            if(we.isEmpty()){
                we.addLast(i);
            }else{
                while(!we.isEmpty() && nums[i] >= nums[we.peekLast()]){
                    
                   we.pollLast();
                }
                we.addLast(i);
            }
        }
        re[0] = nums[we.peekFirst()];

        int j=0;
        for(int i=k;i<nums.length;i++){
            if(we.peekFirst() < j+1){
                we.pollFirst();
            }
            while(!we.isEmpty() && nums[i] >= nums[we.peekLast()]){
                we.pollLast();
            }
            we.addLast(i);
            
            j=j+1;

            re[j] = nums[we.peekFirst()];
            
        }
        for(int i : re){
            op.add(i);
        }
        return op;
    }
}
全部评论

相关推荐

牛客10001:问就是六个月,全国可飞,给钱就干
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务