基础算法5——双指针

2023-10-31

双指针算法

双指针是一种编程思想,不是某种具体的编程套路或是算法。很多需要双重暴力循环解决的问题,用双指针的思想都可以大大减少复杂度。

在这里插入图片描述

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

双指针算法的核心思想是把利用某些单调的性质,把下面这种朴素算法进行优化:

for (int i = 0; i < n; i ++){
	for (int j = 0; j < n; j ++)
	   // xxxx
}

暴力穷举的复杂度是 O ( n 2 ) O(n^2) O(n2),而双指针算法两个指针移动的总次数最多是 2 n 2n 2n,所以复杂度是 O ( n ) O(n) O(n)

举个最简单的例子:输入一行字符串,每个单词之间用一个空格隔开,现在要求把每个单词单行输出:

#include <iostream>
#include "cstring"
using namespace  std;

int main(){
    char str[101];

    cin.getline(str, 100);

    for (int i = 0, len = strlen(str); i < len; i ++){
        int j = i;
        while (j < len && str[j]!=' ') j ++;

        // 问题的具体逻辑
        for (int k = i; k < j; k ++) cout << str[k];
        cout << endl;
        i = j;  // for 语句里还会i ++
    }

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

基础算法5——双指针 的相关文章

  • UTF8/UTF16 和 Base64 在编码方面有什么区别

    In c 我们可以使用下面的类来进行编码 System Text Encoding UTF8 System Text Encoding UTF16 System Text Encoding ASCII 为什么没有System Text En
  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 如何在 Unity 中从 RenderTexture 访问原始数据

    问题的简短版本 我正在尝试访问 Unity 中 RenderTexture 的内容 我一直在使用 Graphics Blit 使用自己的材质进行绘制 Graphics Blit null renderTexture material 我的材
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • 如何在没有 Control.Invoke() 的情况下从后台线程修改控件属性

    最近 我们遇到了一些旧版 WinForms 应用程序 我们需要更新一些新功能 在专家测试该应用程序时 发现一些旧功能被破坏 无效的跨线程操作 现在 在您认为我是新手之前 我确实有一些 Windows 窗体应用程序的经验 我不是专家 但我认为
  • 将字符串从非托管代码传递到托管

    我在将字符串从非托管代码传递到托管代码时遇到问题 在我的非托管类中 非托管类 cpp 我有一个来自托管代码的函数指针 TESTCALLBACK FUNCTION testCbFunc TESTCALLBACK FUNCTION 接受一个字符
  • C# 用数组封送结构体

    假设我有一个类似于 public struct MyStruct public float a 我想用一些自定义数组大小实例化一个这样的结构 在本例中假设为 2 然后我将其封送到字节数组中 MyStruct s new MyStruct s
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 我的 strlcpy 版本

    海湾合作委员会 4 4 4 c89 我的程序做了很多字符串处理 我不想使用 strncpy 因为它不会终止 我不能使用 strlcpy 因为它不可移植 只是几个问题 我怎样才能让我的函数正常运行 以确保它完全安全稳定 单元测试 这对于生产来
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • 用 C 实现 Unix shell:检查文件是否可执行

    我正在努力用 C 语言实现 Unix shell 目前正在处理相对路径的问题 特别是在输入命令时 现在 我每次都必须输入可执行文件的完整路径 而我宁愿简单地输入 ls 或 cat 我已经设法获取 PATH 环境变量 我的想法是在 字符处拆分
  • C 中的位移位

    如果与有符号整数对应的位模式右移 则 1 vacant bit will be filled by the sign bit 2 vacant bit will be filled by 0 3 The outcome is impleme
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 如何构建印度尼西亚电话号码正则表达式

    这些是一些印度尼西亚的电话号码 08xxxxxxxxx 至少包含 11 个字符长度 08xxxxxxxxxxx 始终以 08 开头 我发现这个很有用 Regex regex new Regex 08 0 9 0 9 0 9 0 9 0 9
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 更改显示的 DPI 缩放大小使 Qt 应用程序的字体大小渲染得更大

    我使用 Qt 创建了一些 GUI 应用程序 我的 GUI 应用程序包含按钮和单选按钮等控件 当我运行应用程序时 按钮内的按钮和字体看起来正常 当我将显示器的 DPI 缩放大小从 100 更改为 150 或 200 时 无论分辨率如何 控件的
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • vmware的存储管理-磁盘扩容后类型变为延迟置零的处理

    有时不想增加驱动 给原有的存储空间扩容 如以下 对磁盘6的空间有原来的200GB扩大到320GB 遗憾的在按照编辑设置中的操作后 磁盘的类型有厚置备置零变成了厚置延迟备置零 不知何原因 后果是此盘不能被用于集群盘啦 按照官方文档 可用vmk
  • 拯救者系列Y9000/R9000/Y7000/R7000款,安装Ubuntu18.04双系统教程,出现亮度无法调节、wifi无适配器、无声音、无蓝牙、触摸板失灵、外接显示器问题(最终篇)

    很多朋友应该跟我一样 兴高采烈的买了台2022最新款拯救者Y9000P笔记本 然后安装Ubuntu18 04之后 发现毛病太多了 亮度无法调节 wifi无适配器 无声音 无蓝牙 触摸板失灵 然后你就去网上各种找教程 大家说的五花八门 但是好
  • RS485总线详解

    RS485总线详解 前言 一 常见接口划分 二 RS485概述 一 简介 二 接口 引脚图 三 RS485总线详解 一 RS485总线概述 二 差分传输 三 原理图 三 RS485与RS232的区别 四 应用详解 一 接口结构 二 与RS
  • aiVMS----CentOS7.6安装Nginx

    安装所需环境 一 gcc 安装 安装 nginx 需要先将官网下载的源码进行编译 编译依赖 gcc 环境 如果没有 gcc 环境 则需要安装 yum install gcc c 二 PCRE pcre devel 安装 PCRE Perl
  • 【vue】禁止重复点击 发送多次请求

    在提交按钮添加loading 通过loading状态防止多次点击 Element https element eleme cn 2 13 zh CN component button div class flex c div
  • 如何领养微信聊天机器人

    我们知道 微信聊天机器人 订阅号本身就是一个机器人 所有用户粉丝都可以直接与其对话 然而订阅号机器人并不是自己的 如何能够拥有一个自己的机器人呢 领养属于自己的微信聊天机器人 可以获得如下功能 1 将个人微信账号转换为聊天机器人 与微信好友
  • 智能合约生成合约地址

    智能合约生成合约地址的第二种方式 Create2 以一道例题解释 计算地址有两种方式 Create keccak256 rlp encode deployingAddress nonce 12 Create2 keccak256 0xff
  • Mayor's posters (线段树+离散化)

    Mayor s posters 线段树 离散化 The citizens of Bytetown AB could not stand that the candidates in the mayoral election campaign
  • 在sqlserver2000数据库中怎么导入.bak文件

    打开企业管理器 新建一个数据库 右击选择还原数据库 选择从设备 选择添加 选择 bak文件 确定 从选项中选择在现有数据库上强制还原 确定 数据库中对数据的操作是一大重要技能 其中 数据的恢复和还原也是常做的事 不知你是否在数据库恢复时遇到
  • 空间复杂度

    基本概念 空间复杂度是对一个算法在运行过程中临时占用存储空间大小的一个量度 我们用 S n 来定义 计算方法 1 空间复杂度 O 1 如果算法执行所需要的临时空间不随着某个变量n的大小而变化 即此算法空间复杂度为一个常量 可表示为 O 1
  • 深度学习框架:tiny_dnn分析(1)—————VS2015编译

    深度学习已经很流行了 主流的框架现在有很多 本人一直以来都是使用的caffe 之前也分析过整个caffe的框架 整个框架相对来说第三方依赖库比较多 作为入门的分析不太合适 这里我想和大家分析的是tiny dnn 这是一个比较小巧的框架 非常
  • 【Qt】QWidget对样式表设置边框无效的解决方法

    1 现象 在对QWidget使用样式表时无效 QWidget MyWgt border 1px solid gray 2 原因 原因是QWidget只支持background background clip和background origi
  • 爆发在即的赛道:十大生态30家常用跨链桥盘点

    写给用户的跨链桥工具集指南 作者 Azuma 编辑 郝方舟 出品 Odaily星球日报 ID o daily 随着 Solana Avalanche Fantom 等公链的集体爆发 新兴生态的造富效应正在抬头 为了追逐这些全新的财富机会 用
  • Materials Studio安装教程

    Materials Studio安装教程简易分享 看过了太多安装教程 需要破解license 总结了一下 出一版简单直装的教程供大家讨论 安装包 安装包放在pan了 链接 https pan baidu com s 1iEVBzuDzE T
  • nuclei poc模板编写笔记(二)

    匹配器 匹配器允许对协议响应进行不同类型的灵活比较 非常易于编写 并且可以根据需要添加多个检查以实现非常有效的扫描 类型 可以在请求中指定多个匹配器 基本上有6种类型的匹配器 Matcher Type Part Matched status
  • openGL之API学习(十)glReadBuffer

    该函数主要是确定颜色缓冲区的来源 不会影响到深度 模板等缓冲区的读取 这里的设置将会影响到glReadPixels glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTe
  • 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法

    建立好一个Maven项目后 如果Java Resources资源文件下没有src main java文件夹 并且在手动创建这个文件时提示 已存在文件 这说明 在这个项目配置中已经有了src main java这个文件夹 至于为什么不显示 我
  • 人脸属性识别 - 使用多任务学习模型在CelebA数据集上进行人脸属性识别任务

    在本博客中 我们将介绍如何使用多任务学习 Multi Task Learning MTL 模型在CelebA数据集上进行人脸属性识别 我们将详细介绍数据准备 模型构建 训练和评估的过程 最后 我们将展示如何使用训练好的模型对新的图像进行属性
  • dn-detr:通过去噪任务加速detr训练

    dn detr 通过去噪任务加速detr训练 论文链接 https arxiv org abs 2203 01305 自DETR问世以来 transformer被引入到了目标检测领域 DETR通过引入query和bipartite grap
  • 基础算法5——双指针

    双指针算法 双指针是一种编程思想 不是某种具体的编程套路或是算法 很多需要双重暴力循环解决的问题 用双指针的思想都可以大大减少复杂度 for i 0 j 0 i lt n i while j lt i check i j j 每道题目的具体