蓝桥杯学习笔记04-滑动窗口不定长(最短/最小)

devtools/2025/2/25 8:39:33/

题目来源

分享丨【题单】滑动窗口与双指针(定长/不定长/单序列/双序列/三指针/分组循环) - 力扣(LeetCode)

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

题目要求大于等于

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int n = nums.size();int left=0, right=0;int miniLen=n+1;int temCnt=0;for(right=0;right<n;right++){temCnt+=nums[right];while(temCnt>=target){miniLen = min(miniLen,right-left+1);temCnt-=nums[left];left++;}}return miniLen==n+1?0:miniLen;}
};

 2904. 最短且字典序最小的美丽子字符串 - 力扣(LeetCode)

substr(起始下标,长度)

class Solution {
public:string shortestBeautifulSubstring(string s, int k) {int len = s.length();int cnt=0, left=0, right=0, minLen = len+1;string result;for(right=0;right<len;right++){if(s[right]=='1') cnt++;//尝试缩小窗口while(cnt==k){int currentLen = right-left+1;if(currentLen<minLen){minLen = currentLen;result = s.substr(left,minLen);}else if(currentLen==minLen){//比较字典序string temStr = s.substr(left,currentLen);if(temStr<result) result = temStr;}if(s[left]=='1') cnt--;left++;}}return result;}
};

 1234. 替换子串得到平衡字符串 - 力扣(LeetCode)

滑动窗口内的就是要替换的,如果窗口外的值都<=target,就可以尝试缩小窗口

(为什么是<=target)

class Solution {
public:int balancedString(string s) {unordered_map<char,int> charCnt;int len = s.length();int target = len/4;int left=0, right=0;int minLen=len+1;for(char c:s){charCnt[c]++;}if(charCnt['Q']==target && charCnt['W']==target && charCnt['E']==target && charCnt['R']==target){return 0;}for(right=0;right<len;right++){charCnt[s[right]]--;while(charCnt['Q']<=target && charCnt['W']<=target && charCnt['E']<=target && charCnt['R']<=target){minLen = min(minLen,right-left+1);charCnt[s[left]]++;left++;}}return minLen;}
};

 

2875. 无限数组的最短子数组 - 力扣(LeetCode)

 下面题解解释了为什么只用重复一次nums

class Solution {
public:int minSizeSubarray(vector<int>& nums, int target) {vector<int> numsVec;int len = nums.size();long long totalNum=0;for(int num : nums){totalNum += num;}if(totalNum == target) return len;int k = target / totalNum;int lateNum = target % totalNum;int left=0, right=0;long long cnt=0;int minLen=INT_MAX;numsVec = nums;numsVec.insert(numsVec.end(),nums.begin(),nums.end());// numsVec = nums+nums;for(right=0;right<2*len;right++){cnt += numsVec[right];while(cnt > lateNum){cnt -= numsVec[left];left++;}if(cnt == lateNum){minLen = min(minLen,right-left+1);}}return minLen == INT_MAX?-1:minLen +k*len;}
};

76. 最小覆盖子串 - 力扣(LeetCode)

set<char> uniqueChars(charRe.begin(),charRe.end()); //去重charRe.assign(uniqueChars.begin(),uniqueChars.end());
class Solution {
public:string minWindow(string s, string t) {unordered_map<char,int> charCnt;unordered_map<char,int> charNow;int len = s.length();int left=0, right=0;int minLen=INT_MAX;int required=0, formed=0;int start=0;for(char c:t){charCnt[c]++;}required = charCnt.size();for(right=0;right<len;right++){char c = s[right];charNow[c]++;if(charCnt.count(c) && charCnt[c]==charNow[c]){formed++;}while(right>=left && required == formed){//试图缩小窗口if(right-left+1<minLen){minLen = min(minLen,right-left+1);start = left;}if(charCnt.count(s[left]) && charNow[s[left]]==charCnt[s[left]]){formed--;}charNow[s[left]]--;left++;}}return minLen==INT_MAX?"":s.substr(start,minLen);}
};

新方法

charCnt.count(c)检查在不在

然后用formed看是否找全了

减的时候还要formed--;

还有right>=left(暂时没有很理解)


http://www.ppmy.cn/devtools/161539.html

相关文章

冒泡排序:简单又易于实现的排序算法

大家好&#xff0c;今天我们来聊聊 冒泡排序&#xff08;Bubble Sort&#xff09;算法。听名字是不是很简单&#xff0c;感觉就像是水面上泡泡一样&#xff1f;没错&#xff0c;冒泡排序的名字来源于这种排序过程中&#xff0c;较大的元素像气泡一样逐步“冒泡”到数组的顶端。…

2. EXCEL中函数和公式《AI赋能Excel》

欢迎来到滔滔讲AI。今天我们来学习和讨论下函数和公式是什么&#xff0c;以及它们之间的区别。 点击图片查看视频 2、AI赋能EXCEL-函数和公式 一、什么是函数 首先&#xff0c;我们来了解一下函数。函数是Excel中预定义的计算工具&#xff0c;能够帮助我们快速进行各种计算。 …

【javaEE】计算机是如何工作的(基础常识)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

maven编译出错,javac: ��Ч��Ŀ�귢�а�: 17

1、异常信息 javac: &#xfffd;&#xfffd;Ч&#xfffd;&#xfffd;Ŀ&#xfffd;귢&#xfffd;а&#xfffd;: 17 &#xfffd;&#xfffd;: javac <options> <source files> -help &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;г&a…

HTML使用 Vue 3 和 Element Plus 实现图片上传功能

在现代 Web 开发中&#xff0c;图片上传功能是一个非常常见的需求。本文将介绍如何使用 Vue 3 和 Element Plus 实现一个功能丰富的图片上传组件。我们将涵盖文件选择、图片预览、文件大小和类型验证、批量上传、以及错误处理等功能。 1. 项目结构 首先&#xff0c;我们需要引…

java springboot 大量close_wait连接 timeout waiting for connection from pool

系统在运行了6-7天后&#xff0c;突然出现timeout waiting for connection from pool&#xff0c;上次出现此问题因为时间紧迫&#xff0c;重启后恢复正常&#xff1b;但此次重启5分钟后&#xff0c;又出现此问题&#xff0c;这个问题不能再拖下去了&#xff0c;异常栈如下 or…

1.✨Java学习笔记

一、 java SE:Java Standard Edition Java ME:Java Mobile Edition Java EE:Java Enterprise Edition Java 由sun 公司推出&#xff0c;后74亿美金转卖给Oracle公司 JDK:Java Development Kit(java开发必备) JRE&#xff1a;Java Runtime Environment&#xff08;java执行环境…

SpringBoot3通过拦截器拦截所有的请求-限制IP访问

说明 SpringBoot3的后端应用想要限制IP的访问。 操作步骤 在 Spring Boot 3 中,你可以通过实现 HandlerInterceptor 接口来创建一个拦截器,拦截所有请求并限制特定 IP 的访问。以下是实现步骤: 1. 创建自定义拦截器 创建一个类实现 HandlerInterceptor 接口,并在 preHa…