当前位置: 首页 > 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.rkmt.cn/news/88735.html

相关文章:

  • Spring新手必看:ApplicationContext加载失败详解
  • Redis 零基础到进阶,类型概述,命令查询,key 操作命令,大小写和帮助命令,string,list,hash,set,笔记11-19
  • Linux上使用Docker安装MinIO指南 - 指南
  • React性能优化实战:3步定位并解决90%的组件渲染问题
  • 对Ai元人文构想的阐释与延伸
  • 8G显存多模态AI革命:MiniCPM-Llama3-V 2.5-int4量化版深度解析
  • MCP集成RAG实战指南:零基础实现运维智能问答系统
  • LTC3542逆向分析——一个极具参考价值的Buck型DCDC电路
  • UE5 材质-28-各种节点:三输出的 if 节点,借助于 time 节点和 Frac(只取小数部分)得到纹理的溶解效果。 也可用于测试 TextureCoordinate 节点的输出向量的值是什么
  • EEHZA1H101P, 具备10000小时高耐久性的混合电容器, 现货库存
  • 零基础搭建简易版6v电影网教程
  • 从零到一:ArcObjects SDK实战开发完全指南
  • C盘清理?
  • MurphySec终极指南:免费开源软件供应链安全检测工具快速上手
  • CHA5659-98F/00 36-43.5GHz 功率放大器
  • 强力解锁Obsidian时间管理:告别笔记混乱的日历插件实战
  • OpenSCA-cli终极指南:免费软件成分分析工具快速上手
  • POML终极指南:5步构建企业级AI应用的完整方案
  • pywebview与React桌面应用开发实战:5个关键问题与架构解决方案
  • vcode内置的AI
  • Java后端常用技术选型 |(一)数据库篇 - 详解
  • sql server 事务日志备份异常恢复案例---惜分飞
  • 完整教程:【029】智能停车计费系统
  • 【超详细】漏洞挖掘入门教程:零基础从原理到实战,全流程拆解 + 工具清单,精通看这一篇!
  • RulersGuides.js终极指南:快速实现网页精准布局的免费工具
  • 国内可用的免费AI
  • 2025年自主智能体(Agent)架构深度研究报告
  • 从0到1搭建智能分析OBS埋点数据的AI Agent:实战指南
  • MYSQL的安装与介绍
  • Scrypted:智能家居视频集成的终极解决方案