首页 > 编程语言 >LeetCode算法—滑动窗口

LeetCode算法—滑动窗口

时间:2024-09-11 19:48:02浏览次数:1  
标签:count 窗口 min length 算法 滑动 LeetCode left

一:滑动窗口

1、窗口:滑动窗口的核心就是一个窗口;通常使用两个指针表示(一个指向左边界;一个指向右边界);窗口中的元素就是当前字串

2、滑动:窗口从数组或字符串的起始位置开始,逐步向右滑动。当窗口无法满足条件时,调整左边界以缩小窗口;当窗口满足条件时,尝试记录当前窗口的结果,并继续调整以找到可能更优的结果。

二:LeetCode

209 长度最小的数组

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

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

def func(nums,target):
    left=0
    sum=0
    min_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+=1
    return min_length if min_length!=float('inf') else 0

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

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

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

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

标签:count,窗口,min,length,算法,滑动,LeetCode,left
From: https://www.cnblogs.com/gsupl/p/18408824

相关文章

  • 基于python+flask框架的基于内容推荐算法的点餐系统(开题+程序+论文) 计算机毕设
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在数字化时代,随着餐饮行业的蓬勃发展,消费者对于个性化、便捷化就餐体验的需求日益增长。传统的点餐方式已难以满足顾客对菜品多样性和个性......
  • 【面试经验】京东 算法工程 广告反作弊 一面 凉经
    一面:HR面+技术面,时长大概1小时多点,HR面15-20分钟HR面:略技术面:c/c++代码片段问题:voidfun(char*p){p=(char*)malloc(100);}intmain(){char*str=NULL;fun(str);strcpy(str,"helloworld");return0;}智能指针相关,和引用的区别C......
  • 遗传与进化计算会议(Genetic and Evolutionary Computation Conference,简称GECCO)多目标
    遗传与进化计算会议(GeneticandEvolutionaryComputationConference,简称GECCO)是进化计算领域内最大的同行评审会议,也是计算机学会(ACM)遗传与进化计算特别兴趣小组(SIGEVO)的主要会议。它涵盖了遗传算法、遗传编程、蚁群优化和群体智能、复杂系统、进化组合优化和元启发式、进......
  • LeetCode 977.有序数组的平方 (java)
    给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100],排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]输出:[4,9,9,......
  • LeetCode 704.二分查找 (java)
    给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1。示例1:输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4示例 2:......
  • AdaBoost算法(AdbBoost Algorithm)—有监督学习方法、非概率模型、判别模型、非线性模型
    定义输入:训练数据集T={(x1......
  • Vue与React的Diff算法
    虚拟DOM定义虚拟DOM是一种用于在前端开发中模拟真实DOM的技术。它是一种抽象的数据结构(简单来说就是一个Javascript对象),用于描述HTML或XML文档的结构和内容。通过将页面的状态和结构保存在内存中,而不是直接操作真实的DOM,虚拟DOM能够减少不必要的DOM操作,从而提高页面性能。......
  • 滑动窗口&动态规划-1031. 两个非重叠子数组的最大和
    问题描述问题求解本题还挺巧妙,有点类似两数和的扩展题。对于两个线段,我们可以固定右线段,然后寻找左线段的最大值。固定右线段使用到的算法是滑动窗口,寻找左线段最大值的算法是动态规划。时间复杂度:O(n)classSolution:defmaximizeWin(self,prizePositions:List[int......
  • Leetcode 2453. Destroy Sequential Targets | rust 实现
    题解问题描述给定一个整数数组nums和一个整数space,我们需要找到一个目标值,使得该目标值在nums中的出现次数最多。如果有多个目标值出现次数相同,则返回最小的目标值。解题思路哈希表统计:使用哈希表map来统计每个seed%space的出现次数,题干中给出的等式等价为nums[n......
  • 基于协同过滤算法实现的同城玩乐推荐系统
    作者主页:编程千纸鹤作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与......