双指针模板

2023-11-18

核心思路

首先打一个 O ( n 2 ) O(n^2) O(n2)的暴力,然后考虑性质;

i,j具有单调性的时候,那么我们才可以用双指针来优化;

基础例题

最长连续不重复子序列

传送门

题面在这里插入图片描述

思路

我们用 r r r表示右指针, l l l表示左指针;

假设r向右移动的时候,l向左移动才是最优解;

我们维护[l,r]表示当前的最长不重复的子段,那么当l向左移动才是最优解,那么就说明我们之前l指针向右移动是非法的;

也就是说我们可以用向左移动的l替换掉当前的l,使得答案最优,那么就是不移动的情况;

Code

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>

using namespace std;

typedef long long ll;

const int N = 1e5 + 10;
int a[N],s[N];
void solve(){
	int n;
	cin >> n;
	for(int i=1;i<=n;++i){
		cin >> a[i];
	}
	int l = 1,ans = 0;
	for(int r=1;r<=n;++r){
		++s[a[r]];
		while(l<=r && s[a[r]] > 1){
			--s[a[l]];
			++l;
		}
		ans = max(ans,r-l+1);
	}
	cout << ans;
}

signed main(){
	std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	solve();
	return 0;
}

数组元素的目标和

传送门

题面

在这里插入图片描述
在这里插入图片描述

思路

见注释

Code

#include <iostream>

using namespace std;

const int N = 1e5 + 10;

int a[N],b[N];

int main(){
    int n,m,x;
    cin >> n >> m >> x;
    for(int i=1;i<=n;++i) cin >> a[i];
    for(int i=1;i<=m;++i) cin >> b[i];
    int j = m;
    //因为数组都是单调上升的
    //那么a(i) + b(j) > x 当i往右移动的时候 那么j必然左移
    //因此是具有单调性的
    for(int i=1;i<=n;++i){
        while(j>=1 && a[i]+b[j] > x) --j;
        if(a[i] + b[j] == x){
            //下标从0开始
            cout << (i-1) << ' ' << (j-1) << '\n';
            break;
        }
    }
    return 0;
}

进阶例题

见其中的统计子矩阵

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

双指针模板 的相关文章

  • idea 编译成功启动失败

    环境 Windows10 IntelliJ IDEA 2021 2 3 Ultimate Edition Apache Maven 3 8 3 SpringBoot版本 2 1 13 RELEASE 问题描述 SpringBoot项目启动时

随机推荐

  • html输入浮点型,input框限定输入值为浮点型代码分享

    本文主要为大家带来一篇对于input 框限定输入值为浮点型的js代码 小编觉得挺不错的 现在就分享给大家 也给大家做个参考 一起跟随小编过来看看吧 希望能帮助到大家 在一些项目中 比如金额用到浮点型 对于input 限定可以参考以下 fun
  • 信创-大数据平台CPU架构支持

    一 CDH和HDP CDP CDP数据中心类似于CDH和HDP 直接安装在硬件服务器上 目前支持市面上主流的X86服务器 包括国内海光服务器 CDH不支持ARM 以上两种大数据平台都仅支持x86架构 早在几年期RedHat联手clouder
  • IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!)

    自动代码 常用的有fori sout psvm Tab即可生成循环 System out main方法等boilerplate样板代码 例如要输入for User user users 只需输入user for Tab 再比如 要输入Dat
  • SQL BOY 4 款脚本工具利器

    对于正在运行的mysql 性能如何 参数设置的是否合理 账号设置的是否存在安全隐患 你是否了然于胸 俗话说工欲善其事 必先利其器 定期对你的MYSQL数据库进行一个体检 是保证数据库安全运行的重要手段 今天和大家分享几个mysql 优化的工
  • Java多线程工具类之循环栅栏计数器

    Java多线程下循环计数器 本文主要内容 CyclicBarrier 下文中凯哥就用cycBar来代替 定义介绍 举例说明 代码演示 从源码来看原理及总结 CyclicBarrier与CountDownLatch 下文就用CountDown
  • 多分类SVM支持向量机的matlab仿真

    目录 一 理论基础 二 核心程序 三 仿真结论 一 理论基础 支持向量机 Support Vector Machine SVM 是一种在统计学习基础上发展起来的机器学习方法 其最大特点是根据Vapnik结构风险最小化原则 它的基本模型是定义
  • 从0到1:如何建立一个大规模多语言代码生成预训练模型

    国产AI辅助编程工具CodeGeeX是一个使用AI大模型为基座的辅助编程工具 帮助开发人员更快的编写代码 可以自动完成整个函数的编写 只需要根据注释或Tab按键即可 它已经在Java JavaScript和Python等二十多种语言上进行了
  • 判断机器大端小端的方法

    Big Endian和Little Endian的定义如下 1 Little Endian就是低位字节排放在内存的低地址端 高位字节排放在内存的高地址端 2 Big Endian就是高位字节排放在内存的低地址端 低位字节排放在内存的高地址端
  • DAC0832数模转换芯片介绍及使用教程

    1 芯片简介 DAC0832是采样频率为八位的D A转换芯片 集成电路内有两级输入寄存器 使DAC0832芯片具备双缓冲 单缓冲和直通三种输入方式 D A转换结果采用电流形式输出 若需要相应的模拟电压信号 可通过一个高输入阻抗的线性运算放大
  • Python小实验2—产生式系统实验

    文章目录 1 实验内容 2 实验目的 3 实验思路 4 源代码 5 实验结果 1 实验内容 设已知初始事实存放在综合数据库中 该动物身上有 暗斑点 长脖子 长腿 奶 蹄 推理机构的工作过程 1 从规则库中取出r 检查其前提是否可与综合数据库
  • QT之QChart绘制动态曲线

    QT之QChart绘制动态曲线 1 头文件 2 值写入QLineSeries 3 创建QChart对象 添加坐标轴 4 创建QChartView 5 QChartView显示到窗口 6 完整例子 QChart的系列 QChartSeries
  • 数据量太大,DOM节点加载过多,怎么保证前端在渲染的时候页面不会卡(性能优化)

    一 定时器分批渲染 既然一次渲染10万条数据会造成页面加载速度缓慢 那么我们可以不要一次性渲染这么多数据 而是分批次渲染 比如一次10000条 分10次来完成 这样或许会对页面的渲染速度有提升 然而 如果这13次操作在同一个代码执行流程中运
  • 苹果今天发布了 iOS 14.5 的第一个开发者预览版

    苹果今天发布了 iOS 14 5 的第一个开发者预览版 其中一个重要的新功能是 iPhone 12 机型在双 SIM 卡模式下对 5G 的全球支持 此前该功能仅在中国大陆地区提供 海外 iPhone 12 机型同时配备了物理 SIM 卡槽和
  • windows利用msys2安装minGW64

    目录 下载mysy2 配置国内源 安装minGW64 下载mysy2 官网下载非常慢 所以我们可以选择从清华大学的源下载 清华大学的msys2源说明 下载msys2 x86 64 20220603 exe 配置国内源 pacman 的配置
  • springboot启动feign项目报错:Service id not legal hostname

    正经学徒 佛系记录 不搞事情 在feign项目中 定义接口调用服务 FeignClient name eureka client public interface TestInterface GetMapping value get Str
  • 99款高质量免费(X)HTML/CSS模板

    99款高质量免费 X HTML CSS模板 01 T 20 在线预览下载该模板 02 Shape 在线预览下载该模板 03 Your Business 在线预览下载该模板 04 Solitude 在线预览下载该模板 05 Fashion C
  • C# BackgroundWorker控件使用方法

    在C Winform开发中 若遇到大量数据操作或运算 通常UI界面卡死造成交互不良 解决方法 1 使用BackgroundWorker控件 2 使用多线程委托回调 本章先介绍该控件使用方法 界面展示 若没使用该控件 点击开始 进度条会滚动但
  • linux程序前后台切换

    1 怎么样使程序在后台执行 方法有很多 这里主要列举两种 假如我们有程序pso cpp 通过编译后产生可执行文件pso 我们要使pso在linux服务器后台执行 当客户端关机后重新登入服务器后继续查看本来在终端输出的运行结果 假设操作都在当
  • Python selenium —— selenium与自动化测试成神之路

    Python selenium selenium与自动化测试成神之路 忽然想谈谈自动化的学习路径 因为发现很多人总是急于求成 不懂该如何学习 在群里总是会遇到很多人问低级问题 写了一个selenium脚本 却执行失败 跑到群里来问 大神 这
  • 双指针模板

    核心思路 首先打一个 O n 2 O n 2 O n2 的暴力 然后考虑性质 当i j具有单调性的时候 那么我们才可以用双指针来优化 基础例题 最长连续不重复子