当前位置: 首页 > article >正文

【优选算法】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);}
};

相关文章:

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

1、长度最小的子数组 思路&#xff1a; class Solution { public:int minSubArrayLen(int target, vector<int>& nums) {// 滑动窗口// 1.left0,right0// 2.进窗口( nums[right])// 3.判断// 出窗口// (4.更新结果)// 总和大于等于 target 的长度最小的 子数组…...

关于GitHub action云编译openwrt

特别声明:此教程仅你有成功离线编译的经验后,使用下列教程更佳 不建议没有任何成功经验的人进行云编译 1、准备工作 使用GitHub云编译模板 GitHub - jxjxcw/build_openwrt: 利用Actions在线云编译openwrt固件,适合官方源码,lede,lienol和immortalwrt源码,支持X86,电…...

数据库学习(二)——MySQL语句

MySQL 语句分为&#xff1a; 语句类型作用关键字示例数据查询&#xff08;DQL&#xff09;查询数据SELECT数据操作&#xff08;DML&#xff09;插入、更新、删除数据INSERT, UPDATE, DELETE数据定义&#xff08;DDL&#xff09;定义或修改表结构CREATE, ALTER, DROP事务控制&a…...

AI Agent 架构设计:ReAct 与 Self-Ask 模式对比与分析

一、引言 (一) AI Agent 技术发展背景 &#x1f680; AI Agent 的演进是一场从“遵循指令”到“自主决策”的深刻变革。早期&#xff0c;以规则引擎为核心的系统&#xff08;如关键词匹配的客服机器人&#xff09;只能在预设的流程上运行。然而&#xff0c;大语言模型的崛起为…...

sql入门语句-案例

Sql入门 数据库、数据表、数据的关系介绍 数据库 用于存储和管理数据的仓库 一个库中可以包含多个数据表 数据表 数据库最重要的组成部分之一 它由纵向的列和横向的行组成(类似excel表格) 可以指定列名、数据类型、约束等 一个表中可以存储多条数据 数据 想要永久化存储…...

A Survey on the Memory Mechanism of Large Language Model based Agents

目录 摘要Abstract1. LLM-Based Agent的Memory1.1 基础概念1.2 用于解释Memory的例子1.3 智能体记忆的定义1.3.1 狭义定义(肯定不用这个定义)1.3.2 广义定义 1.4 记忆协助下智能体与环境的交互过程1.4.1 记忆写入1.4.2 记忆管理1.4.3 记忆读取1.4.4 总过程 2. 如何实现智能体记…...

华为OD机试 - 猴子吃桃 - 二分查找(Java 2025 B卷 200分)

public class Test14 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String[] s = sc.nextLine().split(" ");int[] arr = new int[s.length-1];int count = Integer.parseInt(s[s...

提取数据区域中表格

查看本示例演示效果本示例关键代码的编写位置&#xff0c;请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 在实际的开发过程中&#xff0c;有时会遇到希望提取Word文档中表格数据保存到服务器的需求&#xff0c;此时可以使用PageOffice提取Word文档数据区域…...

【设计模式-5】设计模式的总结

说明&#xff1a;介绍完所有的设计模式&#xff0c;本文做一下总结 设计模式介绍 博主写的设计模式博客如下&#xff1a; 【设计模式-1】UML和设计原则 【设计模式-2.1】创建型——单例模式 【设计模式-2.2】创建型——简单工厂和工厂模式 【设计模式-2.3】创建型——原型…...

【无人机】无人机UAV、穿越机FPV的概念介绍,机型与工具,证书与规定

【无人机】无人机UAV、穿越机FPV的概念介绍&#xff0c;机型与工具&#xff0c;证书与规定 文章目录 1、无人机的定义、概念、技术栈1.1 无人机的概念1.2 无人机技术&#xff08;飞控&#xff0c;动力&#xff0c;通信&#xff09; 2、无人机机型2.1 DJI无人机 &#xff08;航拍…...

链表好题-多种实现

143. 重排链表 - 力扣&#xff08;LeetCode&#xff09; 这道题非常经典&#xff0c;很多大厂都作为面试题。 方法一&#xff1a;寻找中点翻转链表合并链表 class Solution { public:void reorderList(ListNode* head) {if (head nullptr) {return;}ListNode* mid middleNo…...

oracle数据恢复—oracle数据库执行truncate命令后的怎么恢复数据?

oracle数据库误执行truncate命令导致数据丢失是一种常见情况。通常情况下&#xff0c;oracle数据库误操作删除数据只需要通过备份恢复数据即可。也会碰到一些特殊情况&#xff0c;例如数据库备份无法使用或者还原报错等。下面和大家分享一例oracle数据库误执行truncate命令导致…...

OneNet + openssl + MTLL

1.OneNet 使用的教程 1.在网络上搜索onenet&#xff0c;注册并且登录账号。 2.产品服务-----物联网服务平台立即体验 3.在底下找到立即体验进去 4.产品开发------创建产品 5.关键是选择MQTT&#xff0c;其他的内容自己填写 6.这里产品以及开发完成&#xff0c;接下来就是添加设…...

分享两个日常办公软件:uTools、PixPin

1. uTools 网址&#xff1a;https://u.tools/ 这是一个高效智能的在线工具平台。 特点&#xff1a; 专为提升用户的工作效率跟生活便利性设计。 优点&#xff1a; 1&#xff1a;由国内团队开发。 2&#xff1a;通过插件化的方式为用户提供多样化的功能支持。 3&#xf…...

Golang基础学习

​​​​​​​​​​ 初见golang语法 go项目路径 cd $GOPATH //ls可以看到有bin,pkg,src三个文件 cd src/ mkdir GolangStudy cd GolangStudy mkdir firstGolanggo程序执行: go run hello.go//如果想分两步执行: go build hello.go ./hello导入包的方式 import "f…...

[学习] GNSS信号跟踪环路原理、设计与仿真(仿真代码)

GNSS信号跟踪环路原理、设计与仿真 文章目录 GNSS信号跟踪环路原理、设计与仿真一、GNSS信号跟踪环路概述二、跟踪环路基本原理1. 信号跟踪的概念与目标2. 锁相环&#xff08;PLL&#xff09;原理3. 锁频环&#xff08;FLL&#xff09;原理4. 延迟锁定环&#xff08;DLL&#x…...

Python实例题:Python计算微积分

目录 Python实例题 题目 代码实现 实现原理 符号计算&#xff1a; 数值计算&#xff1a; 可视化功能&#xff1a; 关键代码解析 1. 导数计算 2. 积分计算 3. 微分方程求解 4. 函数图像绘制 使用说明 安装依赖&#xff1a; 基本用法&#xff1a; 示例输出&#…...

如何判断指针是否需要释放?

在 C 中判断一个指针是否需要释放可以考虑以下几个方面&#xff1a; 一、确定指针的来源 1. 动态分配的内存&#xff1a; 如果指针是通过new、new[]、malloc、calloc等动态内存分配函数获取的&#xff0c;那么在不再需要该内存时&#xff0c;必须手动释放。 例如&#xff1a…...

Spark 之 AQE

个人其他链接 AQE 执行顺序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 产生 AQE 的 循环触发点 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…...

随访系统安装的记录

安装PG17.5 安装https://www.cnblogs.com/nulixuexipython/p/18040243 1、遇到navicat链接不了PG https://blog.csdn.net/sarsscofy/article/details/84985933 2、查看有无安装mysqlhttps://blog.51cto.com/u_16175430/7261412 3、 方案一&#xff1a;oracle不开日志 data…...

NLP学习路线图(二十四):门控循环单元(GRU)

一、背景:RNN的困境与门控机制的曙光 RNN的基本原理: RNN的核心思想是引入循环连接,使网络具有“记忆”功能。 在时刻 t,RNN接收当前输入 x_t 和前一个时刻的隐藏状态 h_{t-1}。 通过一个共享的权重参数(W, U, b)计算当前时刻的隐藏状态 h_t: h_t = tanh(W * x_t + U * …...

Doris查询Hive数据:实现高效跨数据源分析的实践指南

#### 1. Doris与Hive的集成背景 在大数据生态中&#xff0c;Hive作为基于Hadoop的数据仓库工具&#xff0c;广泛用于海量数据的批处理分析。而Apache Doris&#xff08;原百度 Palo&#xff09;是一种高性能、实时分析的MPP&#xff08;大规模并行处理&#xff09;数据库&…...

vsCode使用本地低版本node启动配置文件

npm run dev的配置文件 {"configurations": [{"type": "node-terminal","name": "项目运行: dev","request": "launch",//重点在这里 这行注释到时候删掉"command": "E:\\node-v14.21.…...

在Ubuntu上使用 dd 工具制作U盘启动盘

在Ubuntu上使用 dd 工具制作U盘启动盘 在Linux系统中&#xff0c;dd 是一个功能强大且原生支持的命令行工具&#xff0c;常用于复制文件和转换数据。它也可以用来将ISO镜像写入U盘&#xff0c;从而创建一个可启动的操作系统安装盘。虽然图形化工具&#xff08;如 Startup Disk…...

el-table表格增加序号列index vue2和vue3的写法

<el-table><!--每页从1开始的序号--><el-table-column label"序号" width"60" align"center" type"index" /><!--一直递增的序号 vue2写法--><el-table-column label"序号" width"60"…...

【学习记录】如何使用 Python 提取 PDF 文件中的内容

如何使用 Python 提取 PDF 文件中的内容 在文档自动化处理、数据提取和信息分析等任务中&#xff0c;从 PDF 文件中提取文本是一项常见需求。PDF 文件通常分为两种类型&#xff1a;基于文本的 PDF 和 包含扫描图像的 PDF。 本文将介绍如何使用 Python 分别提取这两种类型的 P…...

Spark 之 DataFrame 开发

foreachPartition val data = spark.sparkContext.parallelize(1 to 100)// 使用 foreachPartition 批量处理分区 data.foreachPartition {partitionIterator =...

嵌入式学习笔记 - freeRTOS xTaskResumeAll( )函数解析

第一部分 移除挂起等待列表中的任务 while( listLIST_IS_EMPTY( &xPendingReadyList ) pdFALSE )//循环寻找直到为空&#xff0c;把全部任务扫描一遍 { pxTCB ( TCB_t * ) listGET_OWNER_OF_HEAD_ENTRY( ( &xPendingR…...

机器学习KNN算法全解析:从原理到实战

大家好&#xff01;今天我们来聊聊机器学习中的"懒人算法"——KNN&#xff08;K-Nearest Neighbors&#xff0c;K近邻&#xff09;算法。这个算法就像个"墙头草"&#xff0c;它不学习模型参数&#xff0c;而是直接根据邻居的"投票"来做决策&…...

【QT】自定义QWidget标题栏,可拖拽(拖拽时窗体变为normal大小),可最小/大化、关闭(图文详情)

目录 0.背景 1.详细实现 思路简介 .h文件 .cpp文件 0.背景 Qt Linux&#xff1b;项目遇到问题&#xff0c;解决后特此记录 项目需要&#xff0c;个性化的标题栏&#xff08;是个widget&#xff09;&#xff0c;在传统的三个按钮&#xff08;最大化、最小化、关闭&#xf…...