算法——滑动窗口

什么是窗口?就是符合题目要求的区域内的数据,将每次符合数据的窗口内的数据记录下来,然后将窗口后移,寻找其他符合要求的数据,每次进入窗口和退出窗口都需要一定的要求

一、长度最小的子数组

LCR 008. 长度最小的子数组 - 力扣(LeetCode)

思路

代码

class Solution {
public:bool istarget(int x, int target){if (x >= target)return true;return false;}int minSubArrayLen(int target, vector<int>& nums) {//先判断是否有总和是否大于target,如果不是那么就直接返回0int judgesum = 0;for (auto e : nums){judgesum += e;}if (judgesum < target)return 0;int len = nums.size(), left = 0, right = 0;//开拓一个数组,放入符合条件的长度,之后进行遍历,进行排序,然后返回最小值vector<int> ans;int sum = 0;while (left < len && right < len){sum += nums[right];if (istarget(sum,target))//如果超过了{while (sum>=target){ans.push_back(right - left + 1);sum -= nums[left];++left;}++right;}    else//不满足,那么右指针往后走 {++right;}}sort(ans.begin(), ans.end());return ans[0];}
};

二、无重复字符的最长子串

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

思路

照常还是使用滑动窗口,符合要求的就进入窗口并且记录,不符合要求的就出窗口

这道题的重点就是在于如何判断已经出现过的字母——需要用到哈希表

但是这里会有特殊情况

若是在中间地方出现了重复的,例如pwwke,那么我们前边的pw这两个字母都不要了,重新统计

代码

 int lengthOfLongestSubstring(string s) {unordered_map<char,int> mp;int l=0,r=0;int ans=0;while(r<s.size()){mp[s[r]]++;//右指针对应的下标的字母个数往上加while(mp[s[r]]==2)//如果对应的字母出现两次了,说明这时候就要更新开头的位置,并且要将其对应的字母的个数要重置,避免多余的删除{mp[s[l++]]--;}ans=max(ans,r-l+1);//每一次都要更新最长的长度r++;//右指针往后}return ans;}

三、最大连续1的个数Ⅲ

1004. 最大连续1的个数 III - 力扣(LeetCode)

思路

这个题目其实可以暴力枚举,但是枚举终究是会超时的,那我们需要用什么来减少时间复杂度?

——滑动窗口

此处的重点是在于将统计翻转后连续1的个数——>一个连续数组里0的个数

然后,我们要注意

当0的个数=k的时候,不是立刻停止读取,而是要判断0下一个数字是否为0,若为0,那就停止right的移动。

若为1,那么right往后的话,连续数组里0的个数还是没有超过k,也就是翻转的次数没有超过k。

为了方便,我选择了当统计0的个数>3的时候,也就是读取到多余的一个0的时候,就开始移动窗口。

并且此题与上两题不同的是,这题是实时记录长度,其他两题是进入窗口后才进行数据的记录

代码

class Solution {
public:int longestOnes(vector<int>& nums, int k) {int ret=0;for(int left=0,right=0,zero=0;right<nums.size();right++){if(nums[right]==0)zero++;while(zero>k){if(nums[left++]==0)zero--; }ret=max(ret,right-left+1);}return ret;}
};

四、将x减到0的最小操作数

1658. 将 x 减到 0 的最小操作数 - 力扣(LeetCode)

思路

这道题还是按照滑动窗口,但是题目中给到“移除数组最左端或最右边的元素”。

左右遍历是可以的,但会使代码量及其复杂,我们是否可以换个思路——找到连续的数组使其符合什么关系?

所以我们的思路就转换为——找到连续的数组,使其总和为sum-x,并且找到其最长的长度

代码

int minOperations(vector<int>& nums, int x) {int len=nums.size(),sum=0;for(auto e:nums){sum+=e;}int target=sum-x;int left=0,right=0,maxlen=-1,testsum=0;while(left<len&&right<len){testsum+=nums[right];if(testsum==target){maxlen=max(maxlen,right-left+1);++right;}if(testsum>target){while(testsum>target&&left<len){testsum-=nums[left++];}//去重后也需要进行一个判断if(testsum==target){maxlen=max(maxlen,right-left+1);++right;}}if(testsum<target){++right;}}if (maxlen == -1)//若还为-1,说明没有找到return -1;return (len-maxlen);//总长度减去连续的最长长度,便是两端最短的长度}

未完待续.....

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

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

相关文章

element el-upload上传功能

2023.11.14今天我学习了如何使用el-upload: <!--drag设置可拖动--><!--accept".xlsx"设置上传的文件类型--><!--:limit1上传文件的最大个数--><!--:auto-upload"false"是否在选取后直接上传--><!--:before-upload"beforeU…

城市内涝对策,万宾科技内涝积水监测仪使用效果

随着城市化进程的加速&#xff0c;城市道路积水问题明显越来越多&#xff0c;给人们的出行和生活带来更多的不便。内涝积水监测仪作为高科技产品能够实时监测道路积水情况&#xff0c;为城市排水系统的管理和维护提供重要的帮助。 在城市生命线的基础设施规划之中&#xff0c;地…

第三天课程 RabbitMQ

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&am…

python数据结构与算法-02_数组和列表

线性结构 本节我们从最简单和常用的线性结构开始&#xff0c;并结合 Python 语言本身内置的数据结构和其底层实现方式来讲解。 虽然本质上数据结构的思想是语言无关的&#xff0c;但是了解 Python 的实现方式有助于你避免一些坑。 我们会在代码中注释出操作的时间复杂度。 数…

LeetCode【923】三数之和的多种可能性

题目&#xff1a; 思路&#xff1a; https://www.jianshu.com/p/544cbb422300 代码&#xff1a; int threeSumMulti(vector<int>& A, int target) {//Leetcode923:三数之和的多钟可能//initialize some constint kMod 1e9 7;int kMax 100;//calculate frequenc…

亚马逊云AI大语言模型应用下的创新Amazon Transcribe的使用

Transcribe简介 语音识别技术&#xff0c;也被称为自动语音识别&#xff08;Automatic Speech Recognition&#xff0c;简称ASR&#xff09;&#xff0c;其目标是将人类的语音中的词汇内容转换为计算机可读的输入&#xff0c;例如按键、二进制编码或者字符序列。语音识别技术已…

论文浅尝 | 用于开放式文本生成的事实增强语言模型

笔记整理&#xff1a;李煜&#xff0c;东南大学硕士&#xff0c;研究方向为知识图谱 链接&#xff1a;https://proceedings.neurips.cc/paper_files/paper/2022/hash/df438caa36714f69277daa92d608dd63-Abstract-Conference.html 1. 动机 生成式语言模型&#xff08;例如 GPT-3…

【机器学习基础】机器学习的模型评估(评估方法及性能度量原理及主要公式)

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;后面的内容会越来越有意思~ &#x1f4a1;往期推荐&#xff1a; 【机器学习基础】机器学习入门&#xff08;1&#xff09; 【机器学习基…

一文说清楚Openai的这波更新内容,大地震 一大波套壳公司倒闭

前几天Openai召开了首届的开发者大会&#xff0c;45分钟的会议&#xff0c;让千万用户感到兴奋&#xff0c;但是让万千的套壳的创业公司&#xff0c;却感觉如坐针毡。这次发布会发布了哪些功能&#xff1f;为什么会导致这种情况的发生&#xff1f;让我们接着往下讲 API升级且降…

Spring面试题:(七)Spring AOP思想及实现

AOP思想的概念 AOP的实现&#xff1a;动态代理技术 通过spring容器获取目标对象和增强对象&#xff0c;通过动态代理生产代理对象&#xff0c;在目标对象的目标方法执行增强方法&#xff0c;返回生成代理对象给spring容器&#xff0c;在获取bean时则获取代理对象。 JDK代理和…

虹科示波器 | 汽车免拆检修 | 2014款保时捷卡宴车行驶中发动机偶尔自动熄火

一、故障现象 一辆2014款保时捷卡宴车&#xff0c;搭载4.8L自然吸气发动机&#xff0c;累计行驶里程约为10.3万km。车主反映&#xff0c;行驶中发动机偶尔自动熄火&#xff0c;尤其在减速至停车的过程中故障容易出现。 二、故障诊断 接车后路试&#xff0c;确认故障现象与车主所…

《深入浅出.NET框架设计与实现》阅读笔记(四)

静态文件系统 通过ASP.NET Core 提供的静态文件模块和静态文件中间件&#xff0c;可以轻松的让应用程序拥有访问静态文件的功能&#xff0c;同时可以基于IFileProvider对象来自定义文件系统&#xff0c;如基于Redis做扩展文件系统 启动静态文件服务 在Program.cs 类中&#x…