首页 > 其他分享 >《力扣面试150题》题单拓展——滑动窗口

《力扣面试150题》题单拓展——滑动窗口

时间:2023-12-01 21:22:05浏览次数:30  
标签:150 缩进 窗口 int 结算 力扣 滑动 题单

《力扣面试150题》题单拓展——滑动窗口

1.基础知识

先区分好,枚举右端点,还是左端点,

窗口内的条件改变后,一般都是while控制另一个窗口的移动,然后收集结算

我感觉滑动窗口这里变动最大的,什么时候去滑动左窗口,什么时候去收集答案,都很不一样,得慢慢体会

滑动窗口难题是真的难,呜呜呜呜枯了

//把char转为int  0~255
//可以直接vector[string[2]]++;
int findSubArray(vector<int> &nums){
    int n = nums.size();
    int l = 0;
    int ans = 0;
    for(int r=0; r<n; r++){
        sum += nums[r];		//增加当前右边指针的数字/字符的求和/计数
        while([l, r]不符合题意){		//就是什么时候刚刚开始可以缩进左窗口
            sum -= nums[l];
            l++;
        }
        //需要判断结算是否需要条件
        ans = max(ans, r-l+1);		//结算
    }
    return ans;
}

2.常规窗口

209.长度最小的子数组

枚举右端点,更新sum后,满足条件时,缩进左窗口,结算


713.乘积小于K的子数组

更新mul后,立即判断左窗口的移动,结算

这里结算也需要条件,因为可能是因为窗口l >r 导致的缩进左窗口退出循环


3.无重复字符的最长子串 思想

1.进新来字符后,先while判断怎么移动左窗口,然后收集,借助了set

什么时候缩进左窗口:当新建来的集合里面已经可以找到的时候,刚进来就可以结算,所以不在条件里面

2.跳动窗口,左窗口一直更新为max(s[r]上次出现的位置+1,l),利用了这种特性来进行了窗口内的去重

3.转变窗口内的统计

1004.最大连续1的个数III 难度分:1656

把1的个数,转变为统计窗口内0的个数,绝杀啊

什么时候开始缩进左窗口:窗口内0的个数 > k的时候,缩进外面结算,因为刚进来也会满足条件,所以结算可以不放在条件里面


76.最小覆盖子串

把窗口内的要求转存为了一张数组,满足要求时缩进左窗口,很细

这个题是什么时候开始缩进左窗口:标记刚还清账本的时候开始缩进,去掉左边无关紧要的字符,缩进完毕就可以结算了(因为不是一进来就会满足,所以结算要放在if()里面)


239.滑动窗口最大值

和单调队列进行结合,维护窗口大小的队列,入队,弹出,结算,

4.上难度

1234.替换子串得到平衡字符串 难度分:1878

标签:150,缩进,窗口,int,结算,力扣,滑动,题单
From: https://www.cnblogs.com/cyl018/p/17870893.html

相关文章

  • 《力扣面试150题》题单拓展——双指针
    《力扣面试150题》题单拓展——双指针1.基础知识为什么双指针会正确?不会漏掉搜索空间数组nums递增排序,假设共8个元素假设由于搜索空间i<j的限制,只搜索右上角白色倒三角空间,一开始,我们检查右上方单元格(0,7),即计算A[0]+A[7],与target进行比较。如果不相等的话,则要么大......
  • 《力扣面试150题》题单拓展——二分法
    《力扣面试150题》题单拓展——二分法困难题:找第K大/小1.基础知识首先可以确定答案的上下界单调性分析:如果当前答案为m时,可以满足,一定有一侧是一定满足的,另一侧不一定,需要去探索boolis_ok(){}intl,r;intans;while(l<=r){intm=l+((r-l)>>1);......
  • 《力扣面试150题》题单拓展——堆
    《力扣面试150题》题单拓展——堆一、堆困难题:找K小,先考虑二分法基础知识//优先队列:priority_queue<int,vector<int>,greater<int>>q;//小根堆priority_queue<int,vector<int>,less<int>>q;//小根堆优先队列自定义比较函数//1,小根堆boolcmp(vector<i......
  • 力扣907. 子数组的最小值之和(单调栈)
    给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。由于答案可能很大,因此 返回答案模 10^9+7 。 示例1:输入:arr=[3,1,2,4]输出:17解释:子数组为[3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为3,1,2,4,1,1,2,1,1,1,和......
  • 从 15000 家参赛企业脱颖而出,涛思数据荣获中国创新创业大赛“优秀企业”
    近年来,以大数据、人工智能、物联网、新型显示、高性能集成电路、5G通信、云计算等为代表的创新技术加速突破应用,在传统行业的数字化转型进程中发挥着重要作用,催生出一系列新产品、新技术、新业态,形成了强劲的数字经济发展新动能。在此背景下,2023第十二届中国创新创业大赛新一代信......
  • ACM中的组合计数题单好题汇总(持续更新中)
    前言:这里会分享一些精妙的组合计数题,此类题往往需要选择合适的计数集合的划分方式,有些计数角度的精妙,个人感觉没有做过相对的题目,或者是计数感足够犀利,实在是很难想到正确的角度,所以这里会汇总一些有趣的计数题,希望可以帮助到一部分人ARC168C-SwapCharacte......
  • [Codeforces] CF1506C Epic Transformation
    EpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(*a_i\neqa_j*\) 然后删除 \(*a_i,a_j*\) 两个数。求序列 a 经过若干次操作后最少......
  • Oracle DBA遇到的top150个问题
    作为OracleDBA(数据库管理员),以下是更多常见的Oracle数据库管理中可能遇到的150个问题案例:数据库备份和恢复失败数据库性能下降数据库连接问题长时间运行的查询和死锁数据库服务器崩溃或宕机数据库空间不足数据库日志文件过大数据库表空间损坏数据库安全漏洞数据库版本升......
  • 力扣刷题随笔
    力扣刷题随笔回文链表给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false输入:head=[1,2,2,1]输出:true输入:head=[1,2]输出:false链表中节点数目在范围[1,105]内0<=Node.val<=9本题的思路就是利用双指针的方法来比......
  • CF1506C Epic Transformation
    CF1506CEpicTransformationEpicTransformation-洛谷算是今天的题目里边思维难度最高的一道了,但是代码真的简单的要死题意你有一个长度为 \(n\) 的序列 \(a\),你可以对其进行下列操作:选择 \(i,j\) 满足 \(a_i\neqa_j\) 然后删除 \(*a_i,a_j*\) 两个数。求序......