栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【剑指 Offer】59 - I. 滑动窗口的最大值(详细解析)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【剑指 Offer】59 - I. 滑动窗口的最大值(详细解析)

第 46 日:I. 滑动窗口的最大值

题目链接:https://leetcode-cn.com/problems/hua-dong-chuang-kou-de-zui-da-zhi-lcof/

题目

解题
  1. 双向队列

    解题思路:

    第一时间想到的是暴力破解,但是暴力破解肯定没前途啊,后面又思考了很久~~

    使用双向队列,来存放窗口中的值,并且时刻保证队列中最左端为窗口数的最大值;

    如何实现?:窗口每次向右移动,添加数值到队尾并且将队尾左侧小于该数值的数移除。

    这样就保证了,队列头时刻为窗口里的最大值!!

    但有些细节要注意,如果窗口为2,数组为5,1,2,3,4;这样的按上面算法,5在队列中一直不会过期。

    所以要设立一个窗口的左指针,移动后判断左指针的数是否和队列头的数相等,相等就设置过期。

    详细代码如下:

    class Solution {
        public int[] maxSlidingWindow(int[] nums, int k) {
            if (k==0||k==1) return nums;
            Deque deque = new linkedList<>();
            int[] res=new int[nums.length-k+1];
            int l=1-k,r=0;
            //形成窗口期
            for (;rdeque.getLast())
                    deque.removeLast();
                deque.add(nums[r]);
            }
            res[l-1]=deque.getFirst();
            //已形成
            for (;rdeque.getLast())
                    deque.removeLast();
                deque.add(nums[r]);
                res[l]=deque.getFirst();
            }
            return res;
        }
    }
    

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630862.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号