首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

滑动窗口问题总结

编程知识
2024年09月23日 15:58

适用范围

1、一般是字符串或者列表
2、一般是要求最值(最大长度,最短长度等等)或者子序列

算法思想

1、在序列中使用双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为一个窗口。
2、先不断地增加 right 指针扩大窗口 [left, right],直到窗口中的序列符合要求。
3、此时,停止增加 right,转而不断增加 left 指针缩小窗口 [left, right],直到窗口中的序列不再符合要求。同时,每次增加 left前,都要更新一轮结果。
4、重复第 2 和第 3 步,直到 right 到达序列的尽头。
思路其实很简单:第 2 步相当于在寻找一个可行解,然后第 3 步在优化这个可行解,最终找到最优解。左右指针轮流前进,窗口大小增增减减,窗口不断向右滑动。

Note: 因为每次right找到新的字符串后会向后移动,指向的是下一个待判断的字符,所以,如果是判断字符串的长度应该是用right-left,而不是right-left+1

代码模板

func slidingWindowTemplate(s string) int {
    left, right := 0, 0 // 初始化窗口的左右边界
    result := 0 // 用于存储结果
    window := make(map[byte]int) // 记录窗口中元素的频率,或其他窗口状态

    // 遍历数组或字符串
    for right < len(s) {
        // 1. 扩展窗口,更新窗口状态
        charRight := s[right]
        window[charRight]++ // 将字符加入窗口
        right++

        // 2. 如果窗口不满足条件,收缩窗口
        for /* 条件: 窗口不满足要求 */ {
            charLeft := s[left]
            window[charLeft]-- // 将左边的字符移出窗口
            left++
        }

        // 3. 更新结果
        result = max(result, right - left) // 例如,记录窗口的最大长度
    }

    // 4. 返回最终结果
    return result
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}



From:https://www.cnblogs.com/CharlseGo/p/18427341
本文地址: http://www.shuzixingkong.net/article/2238
0评论
提交 加载更多评论
其他文章 优化 Go 语言数据打包:性能基准测试与分析
优化 Go 语言数据打包:性能基准测试与分析 场景:在局域网内,需要将多个机器网卡上抓到的数据包同步到一个机器上。 原有方案:tcpdump -w 写入文件,然后定时调用 rsync 进行同步。 改造方案:使用 Go 重写这个抓包逻辑及同步逻辑,直接将抓到的包通过网络发送至服务端,由服务端写入,这样
C#实现信创国产Linux桌面录制成MP4(源码,银河麒麟、统信UOS)
信创国产化已是大势所趋,在国产操作系统上的应用开发的需求越来越多,比如,有客户需要在银河麒麟和统信UOS上实现录制桌面生成一个mp4文件。那么这个要如何实现了?
C#实现信创国产Linux桌面录制成MP4(源码,银河麒麟、统信UOS)
阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略
大家好,我是 V 哥,粉丝小A面试阿里,说被问到 Redis 的内存淘汰策略的问题,整理这个笔记给他参考,也分享给大家,如果你遇到这个问题,会怎么回答呢? Redis 的内存淘汰策略是指当Redis的内存使用量达到设定的上限时,决定哪些数据应该被移除以便为新数据腾出空间的规则。Redis 提供了多种
安装nginx-http-flv-module模块
简介nginx-http-flv-module是什么流程注意事项详细步骤查看当前已经安装的nginx版本下载对应版本的nginx源代码下载nginx-http-flv-module模块源代码重新编译nginx验证nginx-http-flv-module是否安装好了引用 简介 nginx中的模块虽然
duxapp:基于Taro使用模块化开发,提升开发效率
duxapp是基于Taro二次开发的模块化框架 使用这个框架,结合框架提供的UI库和工具库,能帮助你快速且高质量的完成项目,且能实现同时开发小程序、H5、APP(React Native),并且保证各个端的一致性
duxapp:基于Taro使用模块化开发,提升开发效率
最好的文件管理器-dolphin
title: 最好的文件管理器-dolphin author: ivhu date: 2024-09-23 19:04:30 categories: - 计算机 - linux tags: - 文件管理器 description: WARN:windows没有,废话少说,直接开始 what&#39;
最好的文件管理器-dolphin 最好的文件管理器-dolphin 最好的文件管理器-dolphin
76.最小覆盖子串 Golang实现
题目描述: 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 &quot;&quot; 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。 如果 s 中存在这样的子
RDK X5首发上手体验!真的太帅啦!!!
RDK X5首发上手体验!真的太帅啦!!! 本Blog同步发表于以下平台: &#183;地瓜机器人开发者论坛:https://developer.d-robotics.cc/forumDetail/251934743552436286 &#183; CSDN:https://blog.csdn.ne
RDK X5首发上手体验!真的太帅啦!!! RDK X5首发上手体验!真的太帅啦!!! RDK X5首发上手体验!真的太帅啦!!!