【优选算法】C++滑动窗口

1、长度最小的子数组

思路:

class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {// 滑动窗口// 1.left=0,right=0// 2.进窗口( += nums[right])// 3.判断//      出窗口// (4.更新结果)// 总和大于等于 target 的长度最小的 子数组int n = nums.size();int l_r_sum = 0;int ret_len = INT_MAX;for(int left = 0, right = 0; right < n; right++){// 进窗口l_r_sum += nums[right];// 判断while(l_r_sum >= target){// 更新结果int len = right - left + 1;if(len < ret_len)ret_len = len;// 出窗口l_r_sum -= nums[left++];}}return ret_len==INT_MAX?0:ret_len;}
};

2、无重复字符的最长字串

 思路:

class Solution {
public:int lengthOfLongestSubstring(string s) {// 滑动窗口// 1.left=0,right=0// 2.进窗口( += nums[right])// 3.判断//      出窗口// (4.更新结果)int ret_len = 0, n = s.length();int hash[128] = {0};int len = 0;for(int left = 0, right = 0; right < n; right++){// 进窗口hash[s[right]]++;// 判断是否含有重复字符while(hash[s[right]] > 1){// 有重复字符// 出窗口hash[s[left]]--;left++;len--;}// 更新 字串的长度len++;if(ret_len < len)ret_len = len;}return ret_len;}
};

3.、最大连续 1 的个数 III

 

class Solution {
public:int longestOnes(vector<int>& nums, int k) {// 滑动窗口// 1.left=0,right=0// 2.进窗口( += nums[right])// 3.判断//      出窗口// (4.更新结果)(max:放外面;min:放里面)// 找出最长的子数组,0的个数不超过K个int n = nums.size(), ret_count = 0, zero_count = 0;for(int left = 0, right = 0; right < n; right++){// 进窗口if(nums[right] == 0)zero_count++;// 判断是否超过 k 个while(left < n && zero_count > k){// 出窗口if(nums[left++] == 0)zero_count--;}ret_count = max(ret_count, right-left+1);}return ret_count;}
};

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

 思路:

class Solution {
public:int minOperations(vector<int>& nums, int x) {// 滑动窗口// 1.left=0,right=0// 2.进窗口( += nums[right])// 3.判断//      出窗口// (4.更新结果)(max:放外面;min:放里面)// 找出最长的子数组,使它们的和等于 sum - xint all_sum = 0;for(auto & e : nums)all_sum+=e;int target = all_sum-x;// 1  1  4  2  3int max_len = -1, n = nums.size();int max_sum = 0;for(int left = 0, right = 0; right < n; right++){// 进窗口max_sum += nums[right];// 判断while(left < n && max_sum > target) // 先比它大{// 出窗口max_sum -= nums[left++];}   if(max_sum == target)   // 后判断相等max_len = max(right-left+1, max_len);}return max_len==-1?-1:n-max_len;}
};

5、水果成篮

 思路:

class Solution {
public:int totalFruit(vector<int>& fruits) {unordered_map<int, int> hash;       int n = fruits.size();int ret = 0;for(int left =0,right = 0; right < n; right++){hash[fruits[right]]++;while(hash.size() > 2)     //判断{hash[fruits[left]]--;if(hash[fruits[left]] == 0)hash.erase(fruits[left]);left++;}ret = max(ret, right-left+1);}return ret;}
};

6、找到字符串中是所有字母异位词(*)

思路:

class Solution {
public:vector<int> findAnagrams(string s, string p) {// 滑动窗口// 1.left=0,right=0// 2.进窗口( += nums[right])// 3.判断//      出窗口// (4.更新结果)(max:放外面;min:放里面)vector<int> ret_vector;int hash_s[26] = {0};int hash_p[26] = {0};for(auto& xp : p)hash_p[xp-'a']++;int n = s.size();for(int left = 0, right = 0; right < n; right++){// 进窗口hash_s[s[right]-'a']++;// 判断两个 hash 是否相同while(right - left + 1 > p.size()){// 出窗口hash_s[s[left]-'a']--;left++;}if(HashSame(hash_s, hash_p))// 两个hash 相同ret_vector.push_back(left);}return ret_vector;}bool HashSame(int* hash_s, int* hash_p){for(int i = 0; i < 26; i++){if(hash_s[i] != hash_p[i])return false;}return true;}
};

7、串联所有单词的字串

思路:

class Solution {
public:vector<int> findSubstring(string s, vector<string>& words) {vector<int> ret;unordered_map<std::string, int> hash1;for (auto& str : words) {hash1[str]++;}int len = words[0].size(), m = words.size();for (int i = 0; i < len; i++) // 执行 len 次{unordered_map<std::string, int> hash2;for (int left = i, right = i, count = 0; right + len <= s.size(); right+=len) {// 进窗口string in = s.substr(right, len);hash2[in]++;if(hash1.count(in) && hash2[in] <= hash1[in]) count++;// 判断if(right - left + 1 > len * m){// 出窗口 + 维护 countstring out = s.substr(left, len);if(hash1.count(out) && hash2[out] <= hash1[out]) count--;hash2[out]--;left += len;}// 更新结构if(count == m) ret.push_back(left); }}return ret;}
};

 8、最小覆盖字串

 思路:

class Solution {
public:string minWindow(string s, string t) {int hash1[128] = {0};int kinds = 0;  // 统计有效字符有多少种for(auto& e : t){if(hash1[e] == 0) kinds++;hash1[e]++;}int hash2[128] = {0};       // 维护sint minlen = INT_MAX, begin = -1;for(int left = 0, right = 0, count = 0; right < s.size(); right++){char in = s[right];hash2[in]++;if(hash2[in] == hash1[in]) count++;while(kinds == count){if(right - left + 1 < minlen){minlen = right - left +1;begin = left;}char out = s[left++];if(hash2[out] == hash1[out]) count--;hash2[out]--;}}if(minlen == INT_MAX) return "";else return s.substr(begin, minlen);}
};

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

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

相关文章

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…

408考研逐题详解:2009年第33题

2009年第33题 在 OSI 参考模型中&#xff0c;自下而上第一个提供端到端服务的层次是&#xff08; &#xff09; A. 数据链路层 \qquad B. 传输层 \qquad C. 会话层 \qquad D.应用层 解析 本题主要考查 OSI 参考模型各层的核心功能、端到端服务的定义。 OSI 参考模型&am…

CentOS 7.9安装Nginx1.24.0时报 checking for LuaJIT 2.x ... not found

Nginx1.24编译时&#xff0c;报LuaJIT2.x错误&#xff0c; configuring additional modules adding module in /www/server/nginx/src/ngx_devel_kit ngx_devel_kit was configured adding module in /www/server/nginx/src/lua_nginx_module checking for LuaJIT 2.x ... not…

自制喜悦字贴

一、想法 据说&#xff0c;把“喜悦”两个字挂在家里显眼的地方&#xff0c;时常看到&#xff0c;就能心情愉悦。刚好最近在学习前端flex布局&#xff0c;用代码实现&#xff0c;导出图片&#xff0c;打印出来&#xff0c;帖在家里&#xff0c;非常nice。现在分享给大家。 二…

每日八股文6.3

每日八股-6.3 Mysql1.COUNT 作用于主键列和非主键列时&#xff0c;结果会有不同吗&#xff1f;2.MySQL 中的内连接&#xff08;INNER JOIN&#xff09;和外连接&#xff08;OUTER JOIN&#xff09;有什么主要的区别&#xff1f;3.能详细描述一下 MySQL 执行一条查询 SQL 语句的…

量化面试绿皮书:6. 烧绳子计时

文中内容仅限技术学习与代码实践参考&#xff0c;市场存在不确定性&#xff0c;技术分析需谨慎验证&#xff0c;不构成任何投资建议。 6. 烧绳子计时 你有两根绳子&#xff0c;每根绳子燃烧需要1小时。但是任何一根绳子在不同点都有不同的密度&#xff0c;所以不能保证绳子内不…

2-深度学习挖短线股1

选短线个股的流程 &#xff08;1&#xff09;数据预处理&#xff0c;根据短线个股筛选标准&#xff0c;给个股日线数据打标。 &#xff08;2&#xff09;模型训练&#xff0c;针对每只股票&#xff0c;训练得到分类模型。 &#xff08;3&#xff09;结果预测&#xff0c;根据训…

【数据分析】探索婴儿年龄变化对微生物群落(呼吸道病毒和细菌病原体)结构的影响

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍1. 混合效应逻辑回归模型2. 随机森林模型3. Maaslin2 分析加载R包数据下载导入数据数据预处理混合效应逻辑回归模型分析微生物群落结构随年龄的变化随机森林模型预测病原体定植Maas…

实战:子组件获取父组件订单信息

最佳实践建议 优先使用 props&#xff1a;适合父子组件直接通信&#xff0c;数据流向清晰复杂场景用 eventBus&#xff1a;跨组件通信推荐使用 mitt 库避免过度使用 $parent&#xff1a;会导致组件耦合度高&#xff0c;难以维护provide/inject 适用于跨层级&#xff1a;如主题…

Spring Security深度解析:构建企业级安全框架

Spring Security深度解析:构建企业级安全框架 本文将深入探讨Spring Security安全框架的核心原理、架构设计和实际应用,帮助开发者全面掌握企业级应用安全防护技术。 目录 Spring Security概述核心架构与原理认证机制详解授权机制详解核心组件分析配置与集成高级特性应用安全…

计算矩阵A和B的乘积

根据矩阵乘法规则&#xff0c;编程计算矩阵的乘积。函数fix_prod_ele()是基本方法编写&#xff0c;函数fix_prod_opt()是优化方法编写。 程序代码 #define N 3 #define M 4 typedef int fix_matrix1[N][M]; typedef int fix_matrix2[M][N]; int fix_prod_ele(f…

《Brief Bioinform》: 鼠脑单细胞与Stereo-seq数据整合算法评估

一、写在前面 基因捕获效率、分辨率一直是空间转录组细胞类型识别的拦路虎&#xff0c;许多算法能够整合单细胞(single-cell, sc)或单细胞核(single-nuclear, sn)数据与空间转录组数据&#xff0c;从而帮助空转数据的细胞类型注释。此前我们介绍过近年新出炉的Stereo-seq平台&…

camera功能真的那么难用吗

背景 Android开发工作过程中&#xff0c;经常需要用到camera相关能力&#xff0c;比如&#xff1a;人脸识别&#xff0c;ai识别&#xff0c;拍照预览&#xff0c;摄像头录制等等需求。都需要使用到camera&#xff0c;且需要拿到camera的预览数据。但是每次开发这块代码都比较繁…

USART 串口通信全解析:原理、结构与代码实战

文章目录 USARTUSART简介USART框图USART基本结构数据帧起始位侦测数据采样波特率发生器串口发送数据 主要代码串口接收数据与发送数据主要代码 USART USART简介 一、USART 的全称与基本定义 英文全称 USART&#xff1a;Universal Synchronous Asynchronous Receiver Transmi…

LeetCode 152. 乘积最大子数组 - 动态规划解法详解

文章目录 问题描述解题思路动态规划状态定义状态转移方程完整代码实现复杂度分析示例解析关键点说明总结问题描述 给定一个整数数组 nums,请找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组对应的乘积。 示例: 输入: [2,3,-2,4] 输出: 6 解…

Python: 操作 Excel折叠

💡Python 操作 Excel 折叠(分组)功能详解(openpyxl & xlsxwriter 双方案) 在处理 Excel 报表或数据分析时,我们常常希望通过 折叠(分组)功能 来提升表格的可读性和组织性。本文将详细介绍如何使用 Python 中的两个主流 Excel 操作库 —— openpyxl 和 xlsxwriter …

28、元组的遍历

const_cast 只能用于指针或引用类型&#xff0c;而不能用于基本类型如 int。 在的代码中&#xff0c;试图将 i 转换为 const_cast<int>(i)&#xff0c;这是不合法的。 可以使用模板函数来获取元组中的元素&#xff0c;而不是使用 const_cast。以下是修正后的代码&#x…

sendDefaultImpl call timeout(rocketmq)

rocketmq 连接异常 senddefaultimpl call timeout-腾讯云开发者社区-腾讯云 第一种情况&#xff1a; 修改broker 的配置如下&#xff0c;注意brokerIP1 这个配置必须有&#xff0c;不然 rocketmq-console 显示依然是内网地址 caused by: org.apache.rocketmq.remoting.excep…

【仿生机器人】仿生机器人智能架构:从感知到个性的完整设计

仿生机器人智能架构&#xff1a;从感知到个性的完整设计 仿生机器人不仅需要模拟人类的外表&#xff0c;更需要具备类人的认知、情感和个性特征。本研究提出了一个综合性的软件架构&#xff0c;实现了从环境感知到情感生成、从实时交互到人格塑造的完整智能系统。该架构突破了…

Spring Boot微服务架构(十一):独立部署是否抛弃了架构优势?

Spring Boot 的独立部署&#xff08;即打包为可执行 JAR/WAR 文件&#xff09;本身并不会直接丧失架构优势&#xff0c;但其是否体现架构价值取决于具体应用场景和设计选择。以下是关键分析&#xff1a; 一、独立部署与架构优势的关系 内嵌容器的优势保留 Spring Boot 独立部署…