美文网首页
滑动窗口的最大值(剑指offer 面试题65)

滑动窗口的最大值(剑指offer 面试题65)

作者: 抬头挺胸才算活着 | 来源:发表于2020-03-11 15:54 被阅读0次

    用一个双向队列保存数据,队头保留着当前队列的最大值,每次更新数据的时候需要检查队尾的多个元素是否小于输入的值,队头的元素是否过期。因为队列始终是从大到小排列,所以头部始终保留者最大值。

    算法代码;

        public static void maxInSlidingWindow(int[] nums, int windowSize){
            if(nums.length < windowSize && windowSize >= 1)
                return ;
    
            Deque<Integer> queue = new LinkedList<>();
    
            for (int i = 0; i < nums.length; i++) {
                while(queue.size()>0&&nums[queue.peekLast()]<=nums[i]){
                    queue.pollLast();
                }
    
                if(queue.size()>0&&(i-queue.peekFirst())>=windowSize){
                    queue.pollFirst();
                }
    
                queue.offerLast(i);
    
                if(i>=(windowSize-1)){
                    System.out.println(nums[queue.peekFirst()]);
                }
            }
        }
    

    测试代码:

            int[] nums = new int[]{2,3,4,2,6,2,5,1};
            maxInSlidingWindow(nums, 3);
    

    相关文章

      网友评论

          本文标题:滑动窗口的最大值(剑指offer 面试题65)

          本文链接:https://www.haomeiwen.com/subject/spjgdhtx.html