news 2026/4/16 16:50:41

0x3f第二天滑动窗口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
0x3f第二天滑动窗口

1.enumerate是python内置函数,和range都是内置函数,enumerate针对索引和对应元素都需要的时候,可以简化,就不用range了

for key,value in enumerate(nums):

这样就可以直接使用每一趟的key和value,不用写range,再把索引++

2.核心思想滑动窗口,不断枚举右边界,每次扩大右边界一次,就要把左边界缩到最小

左右边界都是从0开始取的,所以是同个起点起跑,右边界会比左边界走的快,

right 从 0 开始逐个前进,left 初始在 0 不动,直到 right 划到某个位置、窗口和满足条件,left 才会开始移动。


相当于往箱子里放球

right_value是往盒子里放新球,每枚举一个右端点,就加一个球

nums【left】是把刚放进去的某个球拿出来,缩窗时拿的球,一定是之前放进去的

temp 就是「盒子里当前所有球的数值的总和」,放球 / 拿球都会动态更新总和。

ans就是球的个数

困惑的点是

n = len(nums)

left = 0

ans = 0 #个数

temp = 0 #当前的总值

for right,right_value in enumerate(nums):

temp += right_value

while (temp -nums[left]) >= target: 错

left += 1

ans = min(ans,right - left + 1)

return ans

核心应该是

while temp>=target:

当出现目标,先记录,记录好,存根,放在ans了,就可以大胆的将left+1,就算不行,ans已经保存了行的时候的结果

ans = min(ans,right - left + 1)

temp - ...

left ++

出现的第二个问题
窗口里的处理顺序:

while temp >= target:

temp -= nums[left] x

ans = min(ans,right - left + 1) x

left += 1

粉色两行的顺序,应该是先记录此时的ans,再-temp

先统计有效窗口,再收缩,才是滑动窗口的标准逻辑;

出现的第三个问题,特殊情况的结,比如所有数加起来都不够,怎么办,此时判断条件是什么

ans == n+1 就说明没有进入过while循环,就是压根没出现过合理的窗口

1.思路完全和上面一致,只不过多了一个怎么把所有数都加上的问题

因为每次循环都把满足小于k的最大子数组找到了,最大子数组满足,那这个子数组中的拆开肯定也符合,就是怎么把他剥离开

我就没有想到

答案是 ans += right-left+1,排列组合问题

2.由于是乘法问题,就会引申到÷运算,本题是整数,所以//整除的性能最高

3.由于是乘法问题,初始值的赋值就要考虑0这个元素,因为任何数乘0都是0




1.首先引入一个函数Counter用来统计字符串的字符出现的次数,和三数之和的去重复性质不同,三数之和重复是排序之后,可能前后一样,我们要做到++来跳过重复的结果

但是最长字串的重复是设计某个元素出现次数,这个时候counter就有大用

用法 cnt = Counter()

再次调用的时候cnt[key],因为是字典子类的通用键访问语法 键----值

ctn['a'] +=1 翻译成人话就是:“把字符 'a' 在窗口内的出现次数加 1”

2.和上面两个题原理是一样的,for循环移动右边界,while循环移动左边界,while的条件根据题目设计

最终可以得到想要的滑动窗口,最终需要什么东西就是通过窗口的left和right来算

比如什么right - left +1 固定的值,不是最大值什么的

比如什么ans = (max,...)不断更新的最大值
核心代码:

while ctn[right_str] > 1:

ctn[s[left]] -= 1

left += 1

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 7:21:43

Hazel引擎解密:揭秘现代游戏引擎的架构哲学

Hazel引擎解密:揭秘现代游戏引擎的架构哲学 【免费下载链接】Hazel Hazel Engine 项目地址: https://gitcode.com/gh_mirrors/ha/Hazel 在游戏开发的世界里,我们常常被一个问题困扰:为什么有的引擎如此强大,而有的却举步维…

作者头像 李华
网站建设 2026/4/16 7:20:39

零基础学Python:时间处理从入门到精通

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个面向初学者的Python时间处理教学项目。要求:1) 分步讲解datetime模块的基础用法;2) 提供5个渐进式练习(从简单日期显示到复杂时区转换&a…

作者头像 李华
网站建设 2026/4/16 7:29:25

std::string vs C字符串:性能对比实测

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 编写一个性能测试程序,对比std::string和C风格字符串在以下操作中的性能差异:1)百万次短字符串拼接;2)大型字符串的查找和替换;3)频繁…

作者头像 李华
网站建设 2026/4/16 7:21:58

传统vs智能:蓝牙水控器开发效率提升300%的秘密

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个对比演示项目,展示传统开发和AI辅助开发蓝牙水控器的效率差异。要求:1. 传统开发方式的典型代码示例;2. AI生成的优化版本代码&#xff…

作者头像 李华
网站建设 2026/4/16 7:21:41

PostgreSQL数据复制实战:pg_replicate完全指南

PostgreSQL数据复制实战:pg_replicate完全指南 【免费下载链接】pg_replicate Build Postgres replication apps in Rust 项目地址: https://gitcode.com/gh_mirrors/pg/pg_replicate PostgreSQL作为企业级关系型数据库,其数据复制功能对于构建分…

作者头像 李华
网站建设 2026/4/15 19:54:47

零基础入门DB-GPT:AI数据库管理的第一课

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个面向初学者的DB-GPT学习应用,提供交互式教程和练习。应用应包含基础SQL语句的自动生成示例,逐步引导用户从简单查询过渡到复杂操作,并提…

作者头像 李华