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

算法基础学习|双指针算法

双指针算法

代码模板

for (int i = 0, j = 0; i < n; i ++ ){while (j < i && check(i, j)) j ++ ;// 具体问题的逻辑
}
常见问题分类:(1) 对于一个序列,用两个指针维护一段区间(2) 对于两个序列,维护某种次序,比如归并排序中合并两个有序序列的操作

例题一:最长连续不重复子序列

题目

给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。

输入格式

第一行包含整数 n

第二行包含 n 个整数(均在 0 \sim 10^5 范围内),表示整数序列。

输出格式

共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。

数据范围

1\leq n\leq 10^5

输入样例

5
1 2 2 3 5

输出样例

3

代码示例

#include <iostream>
using namespace std;const int N = 100010;int a[N], s[N];int main(){int n;cin >> n;for(int i = 0; i < n; i++) cin >> a[i];//双指针运算int res = 0;for(int i = 0, j = 0; i < n; i++){s[a[i]]++;while(j < i && s[a[i]] > 1) s[a[j++]]--;//先--后++res = max(res, i - j + 1);}cout << res << endl;
}

例题二:数组元素的目标和

题目

给定两个升序排序的有序数组 A 和 B,以及一个目标值 x

数组下标从 0 开始。

请你求出满足 A[i]+B[j] = x 的数对 (i, j)

数据保证有唯一解。

输入格式

第一行包含三个整数 n, m, x,分别表示 A 的长度,B 的长度以及目标值 x

第二行包含 n 个整数,表示数组 A

第三行包含 m 个整数,表示数组 B

输出格式

共一行,包含两个整数 i 和 j

数据范围

数组长度不超过 10^5
同一数组内元素各不相同。
1\leq 数组元素\leq 10^9

输入样例

4 5 6
1 2 4 7
3 4 6 8 9

输出样例

1 1

代码示例

#include <iostream>
using namespace std;const int N = 100010;int a[N], b[N];int main() {int n, m, x;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 (j >= 0 && a[i] + b[j] > x) j--;//时间复杂度为O(m+n)if (j >= 0 && a[i] + b[j] == x) cout << i << ' ' << j << endl;}}

例题三:判断子序列

题目

给定一个长度为 n 的整数序列 a_1,a_2,...,a_n 以及一个长度为 m 的整数序列 b_1,b_2,...,b_n

请你判断 a 序列是否为 b 序列的子序列。

子序列指序列的一部分项按原有次序排列而得的序列,例如序列 \left \{ a_1,a_3,a_5 \right \} 是序列 \left \{ a_1,a_2,a_3,a_4,a_5 \right \} 的一个子序列。

输入格式

第一行包含两个整数 n,m

第二行包含 n 个整数,表示 a_1,a_2,...,a_n

第三行包含 m 个整数,表示 b_1,b_2,...,b_n

输出格式

如果 a 序列是 b 序列的子序列,输出一行 Yes

否则,输出 No

数据范围

1\leq n\leq m\leq 10^5,
-10^9\leq a_i,b_i\leq 10^9

输入样例

3 5
1 3 5
1 2 3 4 5

输出样例

Yes

代码示例

#include <iostream>
using namespace std;const int N = 100010;int a[N], b[N];int main() {int n, m;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) cout << "Yes" << endl;else cout << "No" << endl;
}

相关文章:

算法基础学习|双指针算法

双指针算法 代码模板 for (int i 0, j 0; i < n; i ){while (j < i && check(i, j)) j ;// 具体问题的逻辑 } 常见问题分类&#xff1a;(1) 对于一个序列&#xff0c;用两个指针维护一段区间(2) 对于两个序列&#xff0c;维护某种次序&#xff0c;比如归并…...

4.远程登录服务

目录 1. 简介 1.1. 概念 1.2. 功能: 1.3. 分类 1.3.1. 文字接口: 1.3.2. 图形接口&#xff1a; 1.4. 文字接口连接服务器: 2. 连接加密技术简介 2.1. 密钥解析&#xff1a; 3. SSH工作过程&#xff1a; 3.1. 版本协商阶段 3.2. 密钥和算法协商阶段 3.3. 认证阶段(两…...

代码随想录算法训练营第二十九天| 491.递增子序列、46.全排列、47.全排列 II

491.递增子序列 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a;同层相同元素要跳过 java&#xff1a; class Solution {List<List<Integer>> resultnew ArrayList<>();List<Integ…...

基于若依的ruoyi-nbcio流程管理系统一种简单的动态表单模拟测试实现(五)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/n…...

多场景建模:阿里多场景多任务元学习方法M2M

multi-scenario multi-task meta learning approach (M2M) 背景 广告领域大部分是针对用户建模的&#xff0c;像点击率预估&#xff0c;很少有针对广告主需求建模&#xff08;广告消耗预估、活跃率/流失率预估、广告曝光量预估&#xff09;&#xff0c;广告的类型较多&#x…...

仿真机器人-深度学习CV和激光雷达感知(项目2)day03【机器人简介与ROS基础】

文章目录 前言机器人简介机器人应用与前景机器人形态机器人的构成 ROS基础ROS的作用和特点ROS的运行机制ROS常用命令 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;本文内容是我为复试准备的第二个项目 &#x1f4ab;欢迎…...

【多商户开源-BSD- Fecmall 电商平台】

关于Fecmall Fecmall 关于&#xff0c;Fecmall介绍 Fecbbc开源BSD多商户系统&#xff0c;真正开源&#xff0c;商用免费授权的多商户系统 Fecmall系统简介&#xff1a; 全称为Fancy ECommerce Shop&#xff0c; 着重于电商架构的研发优化&#xff0c;全新定义商城的架构体系&…...

2023春秋杯冬季赛 --- Crypto wp

文章目录 前言Cryptonot_wiener 前言 比赛没打&#xff0c;赛后随便做一下题目 Crypto not_wiener task.py: from Crypto.Util.number import * from gmpy2 import * import random, os from hashlib import sha1 from random import randrange flagb x bytes_to_long(f…...

ImageMagick使用手册

ImageMagick使用手册 文章目录 ImageMagick使用手册ImageMagick是什么指令总结1.查看版本2.官网验证指令解读3.svg转png4.png转ico5.将指定文件夹中的所有PNG图像转换为ICO图标 本教程持续更新&#xff0c;我学到多少就更新多少。关于ffmpeg如何安装可以看上一篇博客win系统环境…...

嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第五天-Qt编程技巧若干解答(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1-u7GvgM0TLuiy9z7LYQ80Q?pwd1688 提取码&#xff1a;1688 QT在Windows下制作图表 QT是跨平台的程序设计库&#xff0c;在windows下的程序往往想要有一个好看的图标&#xff0c;方法如下&#xff1a; 1.准备个ICO图标。例如&…...

【蓝桥杯选拔赛真题59】python小写字母 第十五届青少年组蓝桥杯python 选拔赛比赛真题解析

目录 python小写字母 一、题目要求 1、编程实现 2、输入输出...

代码随想录算法训练营Day37|738.单调递增的数字、贪心算法总结

目录 738.单调递增的数字 方法一&#xff1a;暴力解法 方法二&#xff1a;贪心解法 贪心算法总结 738.单调递增的数字 题目链接 文章链接 方法一&#xff1a;暴力解法 class Solution { private:// 各位递增判断函数bool checkNum(int num) {int max 10;while (num) {int …...

笔记-影响力-对比,互惠,赌徒原理

笔记 From 《影响力》 目录 C1 影响力的武器 C2:互惠 C3 承诺和一致 C4:社会认同 C5:喜好 C6:权威 C7:稀缺 Ankie的笔记&#xff1a;对比&#xff0c;互惠&#xff0c;赌徒原理 C1 影响力的武器 人类在认知方面有个原理&#xff0c;叫“对比原理”。 假设有人走进一…...

PIL、cv2、numpy,和pytorch(torch)之间的转换

在图像处理和深度学习中&#xff0c;经常需要在PIL&#xff08;Python Imaging Library&#xff09;、OpenCV&#xff08;cv2&#xff09;、NumPy和PyTorch之间进行图像数据的转换。下面是这些库之间常见的转换方法。 1. PIL和numpy之间的转换 import numpy as np from PIL i…...

Java面试题50道

文章目录 1.谈谈你对Spring的理解2.Spring的常用注解有哪些3.Spring中的bean线程安全吗4.Spring中的设计模式有哪些5.Spring事务传播行为有几种6.Spring是怎么解决循环依赖的7.SpringBoot自动配置原理8.SpringBoot配置文件类型以及加载顺序9.SpringCloud的常用组件有哪些10.说一…...

电脑怎么剪辑视频?这些软件不可错过

电脑怎么剪辑视频&#xff1f;随着视频时代的到来&#xff0c;越来越多的人开始涉足视频制作。从Vlog到短片&#xff0c;再到专业级的影视作品&#xff0c;视频已经成为了我们生活中不可或缺的一部分。那么&#xff0c;如何才能快速掌握视频剪辑技巧&#xff0c;制作出令人惊叹…...

HBase学习七:Compaction

1、简介 Compaction是从一个Region的一个Store中选择部分HFile文件进行合并。其目的为了减少 HFile 的个数跟清理掉过期和删除的数据。 合并原理是,先从这些待合并的数据文件中依次读出KeyValue,再由小到大排序后写入一个新的文件。之后,这个新生成的文件就会取代之前已合…...

MySQL定期整理磁盘碎片

MySQL定期整理磁盘碎片&#xff1a;提升数据库性能的终极指南 MySQL作为一个强大的关系型数据库管理系统&#xff0c;在长时间运行后可能会产生磁盘碎片&#xff0c;影响数据库性能。本博客将深入讨论如何定期整理MySQL磁盘碎片&#xff0c;以确保数据库的高效运行。我们将介绍…...

【centos7安装docker】

背景&#xff1a; 学习docker&#xff0c;我是想做一个隔离环境&#xff0c;并且部署的话&#xff0c;希望实现自动化&#xff0c;不为安装软件而烦恼&#xff0c;保证每个人的环境一致。 2C4G内存 50G磁盘的虚拟机事先已经准备完毕。 1.查看下centos版本&#xff0c;docker要…...

四、Flask学习之JavaScript

四、Flask学习之JavaScript JavaScript&#xff0c;作为一种前端脚本语言&#xff0c;赋予网页生动的交互性和动态性。通过它&#xff0c;开发者能够操作DOM&#xff08;文档对象模型&#xff09;实现页面元素的动态改变、响应用户事件&#xff0c;并借助AJAX技术实现异步数据…...

Linux 系统安装 MySQL(CentOS8/Ubuntu),命令行实操完整版

前言开发和服务器部署基本都是 Linux 环境&#xff0c;本篇手把手教你 CentOS8 和 Ubuntu 两大主流系统命令行安装 MySQL&#xff0c;全程命令复制即用&#xff0c;无多余操作。一、通用前置准备关闭防火墙、关闭 SELinux&#xff08;服务器环境可选&#xff09;bash运行# Cent…...

超声波,毫米波,激光雷达

一、技术原理与核心特性 ‌1.超声波传感器‌ &#xff08;1&#xff09;原理‌&#xff1a;利用20kHz以上机械波的反射时间差&#xff08;ToF&#xff09;测距&#xff0c;典型工作频率40-58kHz。 &#xff08;2&#xff09;核心特性‌&#xff1a; 非接触式测量&#xff0…...

ARM架构ID_ISAR4寄存器详解与应用

1. ARM架构中的ID_ISAR4寄存器概述在ARMv8架构体系中&#xff0c;系统寄存器扮演着处理器功能特性的关键角色。作为指令集属性寄存器家族的重要成员&#xff0c;ID_ISAR4&#xff08;Instruction Set Attribute Register 4&#xff09;专门用于描述处理器在AArch32执行状态下支…...

JSON格式强制输出失败,深度解析DeepSeek-R1/V3模型token级响应机制与schema约束绕过方案

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;JSON格式强制输出失败的现象与根本归因 典型失败现象 当后端服务&#xff08;如 Go/Node.js/Python&#xff09;尝试通过 HTTP 响应强制输出 JSON 数据时&#xff0c;常出现空响应、500 错误、或返回 …...

PlantUML Editor:5分钟学会用代码绘制专业UML图的终极工具

PlantUML Editor&#xff1a;5分钟学会用代码绘制专业UML图的终极工具 【免费下载链接】plantuml-editor PlantUML online demo client 项目地址: https://gitcode.com/gh_mirrors/pl/plantuml-editor 还在为复杂的UML图表绘制而烦恼吗&#xff1f;PlantUML Editor是一款…...

实在Agent如何破解成本分析报告编制耗时耗力与数据滞后?企业架构师的避坑指南

摘要&#xff1a;在2026年的今天&#xff0c;尽管AI技术已深度普及&#xff0c;但许多企业的财务与运营部门仍深陷“数据泥潭”。传统的成本分析报告编制依赖于大量的人工导数、Excel汇总及跨系统搬运&#xff0c;导致报告产出即滞后&#xff0c;严重误导决策。作为一名深耕行业…...

从ASCII到机器码:深入解析HEX文件的结构与校验机制

1. HEX文件的前世今生&#xff1a;从ASCII到机器码的桥梁 第一次接触HEX文件时&#xff0c;我也被那一串串看似毫无规律的十六进制字符搞得一头雾水。直到后来在嵌入式开发中频繁使用HEX文件进行固件升级&#xff0c;才真正理解了这个"翻译官"的重要性。HEX文件本质上…...

代理池管理工具ccproxypal:自动化代理验证、调度与API集成实战

1. 项目概述与核心价值最近在折腾一些需要处理大量网络请求和代理配置的项目时&#xff0c;发现了一个挺有意思的工具&#xff0c;叫lngdao/ccproxypal。乍一看这个名字&#xff0c;可能有点摸不着头脑&#xff0c;但如果你也经常和代理服务器、请求转发、IP池管理这些事儿打交…...

使用kern工具自动化构建Linux内核:从原理到实战

1. 项目概述&#xff1a;一个内核构建与管理的瑞士军刀如果你曾经尝试过编译Linux内核&#xff0c;或者需要为特定的硬件、研究项目定制一个内核&#xff0c;那么你大概率体验过这个过程&#xff1a;下载源码、配置成千上万个选项、解决依赖、漫长编译&#xff0c;最后可能因为…...

MacBook远程控制Win10打游戏?聊聊Microsoft Remote Desktop的那些隐藏玩法和限制

MacBook远程控制Win10打游戏&#xff1f;Microsoft Remote Desktop的极限性能测试与实战技巧 当MacBook用户需要临时调用Windows电脑的资源时&#xff0c;远程桌面工具往往成为救急首选。但你是否想过&#xff0c;这类工具能否胜任游戏、视频剪辑甚至3D建模等高图形负载任务&am…...