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

算法---滑动窗口

以下是对滑动窗口相关题目的总结:

3. 无重复字符的最长子串 - 力扣(LeetCode)

class Solution: def lengthOfLongestSubstring(self, s: str) -> int: char_set=set() max_len=0 left=0 for right in range(len(s)): while s[right] in char_set: char_set.remove(s[left]) left+=1 char_set.add(s[right]) max_len=max(max_len,right-left+1) return max_len

438. 找到字符串中所有字母异位词 - 力扣(LeetCode)

class Solution: def findAnagrams(self, s: str, p: str) -> List[int]: res=[] len_s,len_p=len(s),len(p) if len_s<len_p: return res count_s=[0]*26 count_p=[0]*26 for ch in p: count_p[ord(ch)-ord('a')]+=1 for i in range(len_s): count_s[ord(s[i])-ord('a')]+=1 #保证窗口大小为len(p) if i>=len_p: count_s[ord(s[i-len_p])-ord('a')]-=1 if count_p==count_s: res.append(i-len_p+1) return res

560. 和为 K 的子数组 - 力扣(LeetCode)

针对这一题,如果数组都是非负整数,那么可以用滑动窗口:

class Solution: def subarraySum(self, nums: List[int], k: int) -> int: left=0 num=0 sums=0 for right in range(len(nums)): sums+=nums[right] while sums>k and left<=right: sums-=nums[left] left+=1 if sums==k and left<=right: #这里left<=right不能漏写,否则k=0时,sums=k=0,num=1 num+=1 return num

但如果数组中存在负整数,那么就不能用滑动窗口了,而是要用前缀和。不明白思路可以看看这个视频:

算法面试实录-和为 k 的子数组_哔哩哔哩_bilibili

class Solution: def subarraySum(self, nums: List[int], k: int) -> int: # 哈希表:键为前缀和,值为该前缀和出现的次数 prefix_count = {0: 1} # 初始化:前缀和为0出现1次 prefix_sum = 0 count = 0 for num in nums: # 计算当前前缀和 prefix_sum += num # 查找是否存在前缀和为 prefix_sum - k # 如果存在,说明从这些前缀和的下一个位置到当前位置的子数组和为k if prefix_sum - k in prefix_count: count += prefix_count[prefix_sum - k] # 更新当前前缀和的计数 prefix_count[prefix_sum] = prefix_count.get(prefix_sum, 0) + 1 return count
http://www.jsqmd.com/news/669103/

相关文章:

  • 基于OpenClaw的Alibaba Cloud Linux 3自动化部署YashanDB深度方案
  • 2025_NIPS_InterMT: Multi-Turn Interleaved Preference Alignment with Human Feedback
  • Data Matrix (ECC200) 选型指南:对比libdmtx、ZXing和huBarcode,你的项目该用哪个开源库?
  • Phi-4-Reasoning-Vision开源大模型部署教程:双卡4090免配置镜像实战
  • 前端可视化构建
  • CSS如何快速实现提示框效果_利用Sass @mixin编写Tooltip
  • WordPress 自定义查询分页失效的完整解决方案
  • STM32标准库开发步骤速览,适用于电赛入门学习
  • ofa_image-caption新手友好设计:明确标注‘仅英文输出’降低用户认知负荷
  • 滴水逆向 Day05:函数嵌套调用的内存布局(图文版)
  • Elasticsearch 多标签高亮配置:多关键词不同颜色高亮完整实战
  • 告别截图!用mutool draw命令把PDF批量转成高清PNG图片(附Python脚本)
  • Verilog实战:用SystemVerilog验证你的跨时钟域(CDC)设计是否可靠
  • 智慧金融——解读DeepSeek金融审计应用场景1000问【附全文阅读】
  • 别再买错USB转串口模块了!手把手教你读懂CH340G芯片引脚与典型电路
  • intv_ai_mk11实战教程:用intv_ai_mk11构建内部知识库问答前端原型
  • 告别二维码!用NXP NTA5332 NFC标签,5分钟打造你的智能家居自动化触发器
  • 备案后别忘了这件事!手把手教你为已备案域名配置HTTPS(阿里云SSL证书+Tomcat)
  • 今天爬山去了 , 所以就刷了一道力扣
  • 用于 VoIP 隐写分析的校准感知跨视图注意力网络
  • Windows 安装云崽
  • org.openpnp.vision.pipeline.stages.Normalize
  • 锁相环调频系统避坑指南:VCO中心频率不稳、环路失锁怎么办?
  • Elasticsearch 磁盘水位阈值设置:最合理配置 + 生产实战
  • XFS大硬盘+NFS共享踩坑记:一个fsid=0参数如何避免‘Stale file handle’
  • 别再到处找资源了!一份网盘搞定Keil MDK ARM+C51双环境搭建(含STM32F1/F4芯片包)
  • 如何实现超低延迟音频采集:OBS-ASIO插件完整配置指南
  • 拒绝 API 延迟!侠客工坊如何基于端侧 SLM 重构移动端“数字员工”的视觉操作架构
  • 2026年梧州市代运营引流获客:定义、流程与团队选择标准百科解读
  • TCC分布式事务代码