基础算法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——双指针 的相关文章

  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • OleDbDataAdapter 未填充所有行

    嘿 我正在使用 DataAdapter 读取 Excel 文件并用该数据填充数据表 这是我的查询和连接字符串 private string Query SELECT FROM Sheet1 private string ConnectStr
  • 将 VSIX 功能添加到 C# 类库

    我有一个现有的单文件生成器 位于 C 类库中 如何将 VSIX 项目级功能添加到此项目 最终目标是编译我的类库项目并获得 VSIX 我实际上是在回答我自己的问题 这与Visual Studio 2017 中的单文件生成器更改 https s
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 重载<<的返回值

    include
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的

随机推荐

  • 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 每道题目的具体