前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法:滑动窗口(二)

算法:滑动窗口(二)

作者头像
灰子学技术
发布2020-10-10 16:55:04
3540
发布2020-10-10 16:55:04
举报
文章被收录于专栏:灰子学技术灰子学技术

算法:

这算是滑动窗口的另外一个典型题目,在数据量比较少的时候,可以直接采用暴力法解决;不过数据量比较大的时候,我们就需要想办法解决窗口里面最大值的思路,这里我们采用双端队列queue来实现,借助 queue来保存前面计算过的最大值信息。

题目:

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

解法1:

暴力解法:按照 窗口大小,从头到尾依次遍历,将每个窗口中的最大值 存储到输出的结果中。

代码语言:javascript
复制
func maxSlidingWindow(nums []int, k int) []int {
    if len(nums) < k || len(nums)==0{
        return nil
    }
    
    res := []int{}
    // 滑动窗口的左指针的遍历范围
    for l := 0; l<= len(nums)-k;l++ {
        max := nums[l]
        // 滑动窗口的窗口大小遍历比较
        for r := l+1; r<l+k; r++ {
            if max < nums[r] {
                max = nums[r]
            }
        }
        res =append(res,max)
    }
    return res
}

执行结果:

解法2:

利用双端队列来存储计算过的最大数据,queue来存储遍历过的最大数据,一旦当前元素比queue中的大,就需要将比当前元素小的数据移除;并且保证queue[0]作为每个窗口计算的最大值。

代码语言:javascript
复制
func maxSlidingWindow(nums []int, k int) []int {
    if len(nums)==0{
        return nil
    }
    queue := []int{}
    res := []int{}
    // 用双端队列queue来计算最大值
    for l := 0; l< len(nums);l++ {
        for l>0 && (len(queue)>0) && nums[l]>queue[len(queue)-1] {            // 删除queue中比当前元素小的所有的数,所以是个循环擦欧哦
            // 删除queue中比当前元素小的所有的数据,这里是个循环
            queue = queue[:len(queue)-1]
        }
        // 将大的数字加入双端队列
        queue =append(queue,nums[l])
        // left右移一个窗口大小之后,queue里面的元素需要删除0位置的数字
        if l>=k && nums[l-k] == queue[0] {
            queue = queue[1:]
        }
        // 每个窗口的最大值 放到res中
        if l>= k-1 {
            res = append(res,queue[0])
        }
    }
    return res
}

执行结果:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 灰子学技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档