【蓝桥杯每日一题】双指针算法
🍎 博客主页:🌙@披星戴月的贾维斯
🍎 欢迎关注:👍点赞🍃收藏🔥留言
🍇系列专栏:🌙 蓝桥杯
🌙我与杀戮之中绽放,亦如黎明的花朵🌙
🍉一起加油,去追寻、去成为更好的自己!
蓝桥杯倒计时 41天
文章目录
- 🍎、双指针算法
- 🍎、例题分析
- 🍇、(AcWing)字符串删减
- 🍇、(AcWing)最长连续不重复子序列
- 🍇、(AcWing)数组元素的目标和
- 🍇、(AcWing)判断子序列
- 🍎、总结
提示:以下是本篇文章正文内容,下面案例可供参考
🍎、双指针算法
🍉、双指针算法的简单概念
双指针算法是一种通过设置两个指针不断进行单向移动来解决问题的算法。
🍉、双指针算法的两个应用场景
两个指针i, j分别指向不同的序列。比如:归并排序的合并过程。
两个指针i, j指向同一个序列。比如:快速排序的划分过程。
🍉、双指针算法的核心作用
将O(N^2)的时间复杂度优化成为O(N),相当于去掉了一层for循环。
🍉、双指针算法的通用模板
for (int i = 0, j = 0; i < n; i++)
{while (j < i && check(i, j)) j++;// 每道题目的具体逻辑
}
双指针算法为什么能优化掉一层for循环?
因为原来循环两次i,j,我们是通过回溯的方式来实现遍历的,即原来的内层循环j不满足条件时i++, j = 0开始循环。而双指针算法i, j都是具有单调性的(一般是单调递增),因此时间复杂度最多是O(n + m)。
🍎、例题分析
🍇、(AcWing)字符串删减
本题链接: 字符串删减

简单分析题意:对于长度为n的字符串,我们删除一些字母,使字符串中没用三个或者三个以上的连续的’x’,通过反证法,我们可以得出在最优解中,一定不会删掉’x’以外的字母。设置一个cnt = 0, 来计算每一段x出现的次数,cnt < 3, 操作次数 0, 从cnt >= 3 ,要操作2次

双指针代码示例:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string str;
int n;
int main ()
{cin >> n >> str;int cnt = 0, res = 0;for(int i = 0; i < n; i++)if(str[i] == 'x'){int j = i + 1;while(j < n && str[j] == 'x') j++;res += max(j - i -2, 0);//如果长度小于0就和0取max,精妙的推算i = j - 1;// i是要跳到j的位置,但是i待会会++,所以i = j - 1}cout << res << endl;return 0;}
模拟代码:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
string str;
int n;
int main ()
{cin >> n >> str;int cnt = 0, res = 0;for(int i = 0; i < n; i++)if(str[i] == 'x'){cnt++;if(cnt == 3){cnt -= 1;res++;}}else cnt = 0;cout << res << endl;return 0;}
🍇、(AcWing)最长连续不重复子序列
本题链接: 最长连续不重复子序列

简单分析思路:

代码示例:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e5+10;
int s[N],a[N];
int n;
int main()
{int res = 0;cin >> n;for(int i = 0; i < n; i++) cin >> a[i];for(int i = 0, j = 0; i < n;i++){s[a[i]]++;while(j < i && s[a[i]] > 1){s[a[j]]--;j++;}res = max(res, i - j + 1);}cout << res << endl;return 0;
}
🍇、(AcWing)数组元素的目标和
本题链接: 数组元素的目标和

简单分析思路:本题属于两个指针i, j分别指向不同的序列。,如果a[i] + b[j] == x时,输出i,和j,我们从前往后枚举i,从后往前枚举j,如果两者的和>x,就j–,如果刚好等于就输出+break,如果小于就i++。

代码示例:
#include<iostream>
#include<algorithm>
using namespace std;const int N = 1e5 + 10;
int a[N], b[N];
int n, m, x;
int main ()
{cin >> n >> m >> x;for(int i = 0; i < n; i++) cin >> a[i];for(int i =0; i < m; i++) cin >> b[i];for(int i = 0, j = m - 1; i < n; i++){while(a[i] + b[j] > x && j >= 0){j--;}if(a[i] + b[j] == x){cout << i << " " << j << endl;break;}}return 0;
}
🍇、(AcWing)判断子序列
本题链接: 判断子序列


代码示例
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e6 + 10;
int a[N], b[N];
int n, m;
int main ()
{cin >> n >> m;for(int i = 0; i < n; i++) cin >> a[i];for(int i = 0; i < m; i++) cin >> b[i];int i = 0, j = 0;while(i < n && j < m){if(a[i]== b[j]) i++;j++;}if(i == n) printf("Yes");else printf("No");return 0;
}
🍎、总结
本文简要介绍了双指针的简要概念和几道双指针的经典例题,希望大家读后能有所收获!
相关文章:
【蓝桥杯每日一题】双指针算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
拼数(一般贪心)
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题号:NC16783 时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 设有n个正整…...
LeetCode 热题 C++ 169. 多数元素 10. 正则表达式匹配 155. 最小栈
力扣169 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums [3,2,3] 输出࿱…...
Clickhouse学习:MergeTree
MergeTree一、MergeTree逻辑存储结构二、MergeTree物理存储结构三、总结一、MergeTree逻辑存储结构 如上图所示,在排序键(CountrID、Date)上做索引,数据会按照这两个字段先后排序ClickHouse是稀疏索引,每隔8192行做一个索引,如(a,1),(a,2),比如想查a,要读取[0,3)之间的内容,稀疏…...
【java基础】包装类,自动装箱和自动拆箱
文章目录基本介绍包装类自动装箱自动拆箱包装类注意事项包装类比较包装器内容不可变基本介绍 有时,需要将int这样的基本类型转换为对象。所有的基本类型都有一个与之对应的类。 例如,Integer类对应基本类型int。通常,这些类称为包装器&#…...
Android笔记(二十五):两种sdk热更插件资源加载方案
背景 在研究sdk插件化热更新方式的过程中总结出了两套插件资源加载方案,在此记录下 资源热更方式 方式一:合并所有插件资源 需要解决资源id冲突问题 资源ID值一共4个字段,由三部分组成:PackageIdTypeIdEntryId PackageId&…...
spring框架--全面详解(学习笔记)
目录 1.Spring是什么 2.Spring 框架特点 3.Spring体系结构 4.Spring开发环境搭建 5.spring中IOC和DI 6.Spring中bean的生命周期 7.Spring Bean作用域 8.spring注解开发 9.Spring框架中AOP(Aspect Oriented Programming) 10.AOP 实现分类 11.A…...
2023年CDGA考试模拟题库(401-500)
2023年CDGA考试模拟题库(401-500) 401.数据管理战略的SMART原则指的是哪项? [1分] A.具体 、高质量、可操作 、现实、有时间限制 B.具体、可衡量、可检验、现实、有时间限制 C.具体、可衡量、可操作、现实、有时间限制 D.具体、高质量、可检验、现实12-24个月的目标 答…...
软件设计师备考文档
cpu 计算机的基本硬件系统:运算器、控制器、存储器、输入设备、输出设备 cpu负责获取程序指令,对指令进行译码并加以执行 * cpu的功能控制器(保证程序正常执行,处理异常事件) 程序控制操作控制运算器(只能…...
Javascript的API基本内容(一)
一、获取DOM对象 querySelector 满足条件的第一个元素 querySelectorAll 满足条件的元素集合 返回伪数组 document.getElementById 专门获取元素类型节点,根据标签的 id 属性查找 二、操作元素内容 通过修改 DOM 的文本内容,动态改变网页的内容。 inn…...
10、最小公倍数
法一: #include <stdio.h>int main(){int a,b;scanf("%d%d",&a,&b);int m a>b?a:b;//m表示a,b之间的较大值while(1){if(m%a0&&m%b0){break;}m;}printf("%d",m);return 0; }法二:a*i%b0成立 #include &…...
【vue】vue2.x项目中使用md文件
一、Vue项目展示md文件的三种方式 1、将md文件 导入为 html 生成的标题标签自带具有id属性,值为标题内容; <h2 id"测试">测试</h2> # 处理md为html字符串 yarn add markdown-loader # 处理字符串,用于导出显示 yarn a…...
操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权
系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 注:阅读本编文章前,请先阅读系列文章,以免造成看不懂的情况!! MSF和CS绕过UAC提权 CS绕过UAC提权 拿到一个普通管理员的SHELL,在CS中没有*号代表有…...
快速排序+快速定位
快速排序算法采用了分治法以及递归作为解决问题的思想。在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以…...
nginx http rewrite module 详解
大家好,我是 17。 今天和大家聊聊 nginx http rewrite module 。 简单来说, ngx_http_rewrite_module module 用正则匹配请求,改写请求,然后做跳转。可以是内部跳转,也可以是外部跳转。 学习这个模块的时候…...
机器学习可解释性一(LIME)
随着深度学习的发展,越来越多的模型诞生,并且在训练集和测试集上的表现甚至于高于人类,但是深度学习一直被认为是一个黑盒模型,我们通俗的认为,经过训练后,机器学习到了数据中的特征,进而可以正…...
CV学习笔记-MobileNet
MobileNet 文章目录MobileNet1. MobileNet概述2. 深度可分离卷积(depthwise separable convolution)2.1 深度可分离卷积通俗理解2.2 深度可分离卷积对于参数的优化3. MobileNet网络结构4. 代码实现4.1 卷积块4.2 深度可分离卷积块4.3 MobileNet定义4.4 完…...
C++进阶——继承
C进阶——继承 1.继承的概念及定义 面向对象三大特性:封装、继承、多态。 概念: 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加功能,这…...
数据结构---单链表
专栏:数据结构 个人主页:HaiFan. 专栏简介:从零开始,数据结构!! 单链表前言顺序表的缺陷链表的概念以及结构链表接口实现打印链表中的元素SLTPrintphead->next!NULL和phead!NULL的区别开辟空间SLTNewNod…...
redis数据结构的底层实现
文章目录一.引言二.redis的特点三.Redis的数据结构a.字符串b.hashc.listd.sete.zset(有序集合)一.引言 redis是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、key-value的NoSQL数据库。 通常使用redis作为缓存中间件来降低数据库的压力,除此…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

