蓝桥杯学习笔记03-滑动窗口不定长(最长/最大)

ops/2025/2/24 22:05:46/

题目来源

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

不定长滑动窗口

2024. 考试的最大困扰度 - 力扣(LeetCode)

解决:分别处理‘T’和’F‘

class Solution {
public:int apartSitu(string answerKey, char target, int k){int len = answerKey.length();int left=0,right=0;int border=k;int maxLen=1;for(right=0;right<len;right++){if(answerKey[right]!=target) border--;while(border<0){if(answerKey[left]!=target){border+=1;}left++;}maxLen = max(maxLen,right-left+1);}return maxLen;}int maxConsecutiveAnswers(string answerKey, int k) {// 分别处理 'T' 和 'F':// 由于最终目标是最大化连续 'T' 或 'F' 的数量,因此需要分别计算两种情况的最大长度。int maxLen=0;maxLen = max(maxLen,apartSitu(answerKey,'T',k));maxLen = max(maxLen,apartSitu(answerKey,'F',k));return maxLen;}
};

1838. 最高频元素的频数 - 力扣(LeetCode)

没有想到满足条件的窗口内的都是已经增加到nums[right-1]的值,体现在cost里

class Solution {
public:int maxFrequency(vector<int>& nums, int k) {int len = nums.size();long long cost=0;int left=0, right=0;int maxLen=1;sort(nums.begin(),nums.end());for(right=1;right<len;right++){int target = nums[right];cost += (long long)(target-nums[right-1])*(right-left);while(cost >k && right>left){//移动左边界cost -= (target-nums[left]);left++;}maxLen = max(maxLen,right-left+1);}return maxLen;}
};

注意数据类型cost是long long ,累加的过程也要强转成(long long)

2516. 每种字符至少取 K 个 - 力扣(LeetCode)

窗口在中间,窗口外的每种字符>=k

class Solution {
public:int takeCharacters(string s, int k) {unordered_map<char,int> charNum;for(char c : s){charNum[c]++;}for(char c : {'a','b','c'}){if(charNum[c]<k) return -1;}int left=0,right=0;int len = s.length();int minLen=len+1, tem=0;unordered_map<char,int> windowCnt;for(right=0;right<len;right++){windowCnt[s[right]]++;while((charNum['a']-windowCnt['a']<k ||charNum['b']-windowCnt['b']<k ||charNum['c']-windowCnt['c']<k)){windowCnt[s[left]]--;left++;}minLen = min(minLen, len-(right-left+1));}return minLen==len+1?-1:minLen;}
};

 

2831. 找出最长等值子数组 - 力扣(LeetCode)

1、用unordered_map记录数字的频率。

2、如果窗口内的大小-最大数字的频率>k,就要减小窗口

class Solution {
public:int longestEqualSubarray(vector<int>& nums, int k) {unordered_map<int,int> numCnt;int len = nums.size();int left=0, right=0;int maxLen=0, maxFeq=0;for(right=0;right<len;right++){numCnt[nums[right]]++;maxFeq = max(maxFeq,numCnt[nums[right]]);if((right-left+1)-maxFeq>k){numCnt[nums[left]]--;left++;}maxLen = max(maxLen,maxFeq);}return maxFeq;}
};


http://www.ppmy.cn/ops/161050.html

相关文章

【从0做项目】Java文档搜索引擎(9)烧脑终章!

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 文章导读 零&#xff1a;项目结果展示 一&#xff1a;导入 二&#xff1a;问题引入 1&#xff1a;情…

【DeepSeek】本地部署,保姆级教程

deepseek网站链接传送门&#xff1a;DeepSeek 在这里主要介绍DeepSeek的两种部署方法&#xff0c;一种是调用API&#xff0c;一种是本地部署。 一、API调用 1.进入网址Cherry Studio - 全能的AI助手选择立即下载 2.安装时位置建议放在其他盘&#xff0c;不要放c盘 3.进入软件后…

技术分享:MyBatis SQL 日志解析脚本

技术分享&#xff1a;MyBatis SQL 日志解析脚本 1. 脚本功能概述2. 实现细节2.1 HTML 结构2.2 JavaScript 逻辑 3. 脚本代码4. 使用方法4.1 示例 5. 总结 在日常开发中&#xff0c;使用 MyBatis 作为持久层框架时&#xff0c;我们经常需要查看 SQL 日志以调试和优化查询。然而&…

Docker入门及基本概念

让我们从最基础的概念开始逐步理解。假设你已经准备好了docker 环境。 第一步&#xff0c;让我们先通过实际操作来看看当前系统中的镜像(images)和容器(containers)状态&#xff1a; docker images # 查看所有镜像 docker ps -a # 查看所有容器&#xff08;包括未运行…

postman调用ollama的api

按照如下设置&#xff0c;不需要设置key 保持长会话的方法 # 首次请求 curl http://localhost:11434/api/generate -d {"model": "deepseek-r1:32b","prompt": "请永久记住&#xff1a;110&#xff0c;1-12&#xff0c;之后所有数学计算必…

QT 基础知识点

1.基础窗口类QMainWindow qDialog Qwidget 随项目一起创建的窗口基类有三个可选QMainWindow qDialog Qwidget 1.1 Qwidget 是所有窗口的基类&#xff0c;只要是他的子类&#xff0c;或子类的子类&#xff0c;都具有他的属性。 右键项目 Add New -> Qt qt设计师界面类&am…

FTP 实验(ENSP模拟器实现)

FTP 概述 FTP&#xff08;File Transfer Protocol&#xff0c;文件传输协议&#xff09;是一种用于在网络上进行文件传输的标准协议。它允许用户在两台计算机之间上传和下载文件。 1、FTP采用客户端-服务器模型&#xff0c;客户端通过FTP客户端软件&#xff0c;连接到FTP服务…

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式 3.1 注解方式 基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听重试过程 监…