LeetCode算法—滑动窗口

news/2024/9/19 15:33:51/文章来源:https://www.cnblogs.com/gsupl/p/18408824

一:滑动窗口

滑动窗口分为定长滑动窗口和非定长滑动窗口

定义:滑动窗口的题目一般都是非定长的;一般需要定义两个指针left,right;用来限制窗口的左边界和右边界;


二:LeetCode

209 长度最小的数组

(1)题目:求连续最小的字串和大于目标值的最小长度

(2)思路:定义两个指针;left和right;定义sum表示窗口中的元素的和;min_length表示窗口中满足条件的字串的长度;然后遍历数组;填充窗口中的元素;当窗口中的元素大于目标值的时候;说明需要调整窗口;于是记录当前窗口的长度;然后将窗口左边第一个元素的值删除掉;left指针向前移动一位;继续判断;直至小于目标值的时候说明当前的长度就是满足条件的最小长度;返回mix_length的值;如果不存在直接返回0

def func(nums,target):left=0sum=0min_length=float('inf')for right in range(len(nums)):sum+=nums[right]#填充窗口while sum>=target:#滑动的条件min_length=min(min_length,right-left+1)sum-=nums[left]#弹出左端第一个元素left+=1return min_length if min_length!=float('inf') else 0

1456 定长字符串中元音的最大数目

(1)题目:请返回字符串 s 中长度为 k 的单个子字符串中可能包含的最大元音字母数

(2)思路:首先记录前k的字符中元音字符的数量;然后利用滑动窗口;如果当前的窗口左端的元素为元音字母;那么count-1;入宫窗口的右端的元素为元音字母,count+1;然后取最大的值返回即可

def func(s,k):count=0vowels=('aeiou')for i in range(k):if i in vowels:count+=1max_count=countfor i in range(k,len(s)):if s[i-k] in vowels:count-=1if s[i] in vowels:count+=1max_count=max(max_count,count)return max_count

16 无重复字符串的最长字串

(1)思路:滑动窗口的题目首先需要定义两个指针left,right;right用于遍历字符串;定义max_length用于记录当前字串的长度;

(2)核心:如果窗口右边的元素不在集合中;加入到集合中;如果在集合中;说明左边的元素重复了;于是删除窗口左边的元素并且left指针向右移动;动态调整滑动窗口的大小;最后返回max_length

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:left = 0window = set()  # 使用集合来存储窗口中的字符max_length = 0for right in range(len(s)):# 如果当前字符已经在窗口中,移动左指针以缩小窗口while s[right] in window:window.remove(s[left])left += 1# 将当前字符添加到窗口中window.add(s[right])# 更新最大长度max_length = max(max_length, right - left + 1)return max_length

485 最大连续1的个数

class Solution:def findMaxConsecutiveOnes(self, nums: List[int]) -> int:max_count = 0  # 记录最大连续 1 的数量count = 0      # 当前窗口中的连续 1 的数量for num in nums:if num == 1:count += 1max_count = max(max_count, count)  # 更新最大值else:count = 0  # 遇到 0 时重置计数器return max_count

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795669.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文看懂什么是架构

对程序员来说,架构是一个常见词汇。如果想成为一名架构师,对架构概念的理解必须清晰。否则,在制定架构方案时,肯定会漏洞百出,问题频发,这将对你的面试、晋升和团队领导产生负面影响。 我们看下维基百科关于架构的定义:软件架构是抽象描述系统的一组结构,以及构建这些结…

【图论】Johnson全源最短路算法

2024-9-11 最后更新时间 2024-9-11 作者学会了一个叫做\(Johnson\)的算法,所以就有了这篇博客...... Johnson算法是一个高效处理全源最短路的算法 其实也很慢,但目前是最高效的 为了更加方便你们接下来的学习我希望你们已经掌握了基本的最短路算法(SPFA,Dijsktra,Bellman-…

更新mstsc

这次遇到的问题是系统远程程序mstsc故障,又不想重装系统, 于是通过挂载windows的ISO,想获取system32下的原版程序和相关文件, 挂载ISO后,sources文件夹下有一install.wim文件,通过以下命令提取所有系统安装文件至E盘临时目录temp下 dism /mount-wim /wimfile:"G:\so…

MySQL原理之UUID主键分析,插入或更新语法分析

目录1 MySQL不能用UUID做主键1.1 前言1.2 mysql和程序实例1.2.1 准备工作1.2.2 开始测试1.2.3 程序写入结果1.2.4 效率测试结果1.3 使用uuid和自增id的索引结构对比1.3.1 自增id1.3.2 uuid1.4 自增id缺点1.5 雪花算法2 插入或更新2.1 on duplicate key2.1.1 定义2.1.2 values函…

图与网路——最大流问题精解

容量网络(Capacity Network)是一种特殊的有向图结构,其中每条边都有一个容量(Capacity),表示该边上可以通过的最大流量。在这种网络中,流量(Flow)是指从源点(Source)通过边到达汇点(Sink)的实际传输量。容量网络中的边具有方向性,且每条边的流量不能超过其容量。…

C++中的数组,字符串数组,pair数组

1.C++中的字符串数组: 2. C++中的常量数组 这个const pair<int, string> valueSymbols[]定义了一个常量数组,数组中的每个元素都是一个pair<int, string>类型的对象。pair是C++标准模板库(STL)中的一个模板类,用于将两个值组合成一个单一的对象。在这个特定的…

TensorFlow深度学习框架改进K-means、SOM自组织映射聚类算法及上海招生政策影响分析研究|附代码数据

全文链接:https://tecdat.cn/?p=37652 原文出处:拓端数据部落公众号 分析师:Chen Zhang在教育政策研究领域,准确评估政策对不同区域和学生群体的影响至关重要。2021 年上海市出台的《上海市初中学业水平考试实施办法》对招生政策进行了调整,其中名额分配综合评价模块的…

【python脚本】springboot检测脚本

原创 CatalyzeSecimport requests import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) session = requests.session()# 从文本文件中读取 with open(dic.txt, r) as file:paths = file.readlines()# 移除每个末尾的换行符 paths = [path.str…

STM32学习笔记——中断

中断:在主程序运行过程中,出现了特定事件(例如发生已经预知的一些情况),从而转入中断程序中,处理完成后再回到主程序中继续执行。(频繁的中断函数会影响主程序的运行,所以中断函数一边不处理特别复杂的逻辑) EXTI(Extern Interrupt)外部中断 支持的触发方式:上升沿…