当前位置: 首页 > news >正文

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

http://www.cnnetsun.cn/news/25731.html

相关文章:

  • Sanic框架CLI参数解析异常深度解析与修复指南
  • 效率对比:传统vs AI辅助开发Vue-Baidu-Map
  • Bodymovin/Lottie完整教程:从零开始掌握动画导出与渲染
  • Figma汉化插件实战:跨国团队协作的救星
  • 永磁同步电机控制玩的就是环套环的把戏,今天咱们拆解一套RSMDO+DBCC组合拳。这玩意儿在工业现场对付参数变化和负载扰动特别带劲,不信你看完下面的代码实操
  • 2024年CUPT技术探索:水滴透镜comsol仿真技术与实际应用分析
  • Linux小白也能懂:fcitx5中文输入法安装使用图解
  • 用AI构建导师评价系统:5分钟开发全流程
  • AI图像修复工具深度优化指南:从基础应用到专业调优
  • AI一键生成Oracle安装脚本,告别复杂配置
  • 实用Node-RED编程:从零到精通的完整学习指南
  • OpenAI Whisper Turbo模型实战部署:从零到一构建高效语音转写系统
  • 企业级项目中依赖注入错误的5个真实案例解析
  • MES信息化智能化解决方案,MES实施方案
  • UE5 材质-28-各种节点:三输出的 if 节点,借助于 time 节点和 Frac(只取小数部分)得到纹理的溶解效果。 也可用于测试 TextureCoordinate 节点的输出向量的值是什么
  • UE5 材质-29-各种节点:
  • 有什么好的团队文件管理软件?测评对比14款
  • CV技术的应用现状与CNN模型识别图像中对象的流程
  • 小兔鲜儿微信小程序开发全攻略
  • 项目分享 | Agent Lightning:零代码改动训练与优化你的AI智能体
  • 用户体验设计终极指南:《用户体验的要素》免费PDF下载
  • 如何快速分析C盘里到底是什么东西占用了最多空间?
  • C盘如何清理?
  • C盘清理?
  • 终极指南:5步轻松部署any-listen私有音乐播放器
  • 从零到一:ArcObjects SDK实战开发完全指南
  • sql server 事务日志备份异常恢复案例---惜分飞
  • 蓝牙音箱EMC整改实战——从±8KV静电复位到稳定过检的技术路径
  • 强力解锁Obsidian时间管理:告别笔记混乱的日历插件实战
  • GitHub Actions下载工件全攻略:从基础到高级应用