news 2026/5/19 21:00:10

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/5/11 13:50:58

Python时间处理在电商数据分析中的5个实战案例

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个电商数据分析脚本,使用pandas处理包含时间戳的用户行为数据。要求:1) 按小时统计网站流量变化趋势;2) 计算用户平均停留时长&#xff1b…

作者头像 李华
网站建设 2026/5/11 13:51:04

企业级项目中处理Node模块兼容性错误的5个实战技巧

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个企业级Node.js依赖管理仪表板,功能包括:1. 可视化展示项目依赖树;2. 高亮显示存在兼容性问题的模块(如minimatch10.0.3);3. …

作者头像 李华
网站建设 2026/5/14 4:26:41

5分钟搭建日志管理系统:logrotate原型开发指南

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 创建一个快速原型开发工具,能够:1. 根据简单参数自动生成logrotate配置 2. 提供一键测试环境 3. 支持即时修改和预览 4. 生成可部署的配置包。工具应最大限度…

作者头像 李华
网站建设 2026/5/19 9:57:32

从零到一:3步掌握Metabase API自动化数据报表开发

还在为每天手动导出数据报表而烦恼?面对不同业务系统的数据孤岛,你是否在寻找一个高效的解决方案?本文将带你用全新的视角认识Metabase API,通过问题导向的学习路径,快速实现数据报表的自动化生成与集成。 【免费下载链…

作者头像 李华
网站建设 2026/5/19 9:56:41

1小时快速掌握Unity游戏逆向技术

Unity 游戏逆向不用愁!1 小时实战课:从内存分析到资源提取,全程干货无废话随着游戏行业的飞速发展,Unity作为当前最流行的游戏引擎之一,广泛应用于各种类型的游戏开发。由于Unity游戏的开放性和易用性,其逆…

作者头像 李华