双指针的实践

2023-10-31

一、原理

双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。换言之,双指针法充分使用了数组有序这一特征,从而在某些情况下能够简化一些运算。

伪代码

 void find(int[] list) {
    int left = 0;
    int right = list.length - 1;

    //遍历数组
    while (left <= right) {
        left++;
        // 一些条件判断 和处理
        ... ...
            right--;
    }
}

​ 二、剑指 Offer 48. 最长不含重复字符的子字符串
 

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int ans = 0;
        int i = -1;
        unordered_map<char, int> hashmap;
        for (int j = 0; j < s.length(); j++) {
            if (hashmap.count(s[j])) { // 字符已经存在
                i = max(i, hashmap[s[j]]); // 更新左指针
            }
            hashmap[s[j]] = j;
            ans = max(ans, j - i); // 计算左指针与右指针的间隔
        }
        return ans;

    }
};

三、反转字符串

class Solution {
public:
    void reverseString(vector<char>& s) {
        int n = s.size();
        for (int left = 0, right = n - 1; left < right; ++left, --right) {
            swap(s[left], s[right]);
        }
    }
};


参考:

双指针算法基本原理和实践 - huansky - 博客园

力扣

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

双指针的实践 的相关文章

  • 微信小程序-开了调试Vconsole能正常运行,不开调试不能正常运行

    这个微信小程序太奇怪了 做了一点小改动要上线 在本地连接真机调试好好的 上到体验环境手机打开就不行了 而且奇怪 体验版打开调试后又正常了 加载页面的时候报了一个错 in promise MiniProgramError nInvalid a
  • vue antv X6 ER图

    第一 引入antv npm install antv x6 save 第二 写入代码 官网demo的fetch data er json 有问题
  • 超实用的Spring bean工具类

    1 背景 我们在项目开发过程中 可能会遇到下面的场景 1 想在工具类中调用一个http接口请求数据 然后再调用spring容器中托管的service将请求结果保存到数据库 2 想在工具类中使用spring容器中的环境变量 属性 信息 3 在

随机推荐

  • 干货!ICLR 2023

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 个人简介 张岸 新加坡国立大学NExT实验室博士后 主要研究Robust Trustable AI 个人主页 https anzhang314 github io 01 内容简介
  • 【Python专题】 使用pycharm+pyqt5 控件事件触发

    一 在QtDisigner添加控件事件 1 打开QtDesigner 载入上次构建ui文件 2 添加控件事件 Qt中对控件事件触发都统一称为槽和信号 我这理解为触发源和目标源 事件的添加方法就是在QtDesigner中使用 编辑槽 信号 功
  • c++定义数组

    参考博客 https blog csdn net sinat 34166518 article details 84898086 1 静态内存分配 定义数组的时候 必须指定数组的大小为常量或者常数 如 1 第一种 int array 10
  • 关于数字信号处理中的降采样的学习总结

    1 参考资料链接 https baike baidu com item E9 99 8D E9 87 87 E6 A0 B7 6860368 fr aladdin https wenku baidu com view 611009c881e
  • html设置边界感,边界感

    守住边界感关系 处到刚刚好 对于人与人之间的边界感是怎样一个理解呢 嗯 就是如果不自觉的侵犯别人的边界 同时呢 也是巧妙的守住自己边界的人 所以呢自己的一个边界感是很重要呐 如何去找到自己的边界感 而且边界感如何去用呢 其实这也是对于自己去
  • TCP是如何保证包的顺序传输?

    转自 http blog csdn net ggxxkkll article details 7894112 我和大家一起讨论下TCP在保证可靠传输数据的前提下 是怎样对传输的数据进行顺序化操作的 大家都知道 TCP提供了最可靠的数据传输
  • vuecli打包的项目在本地的nginx上访问不了?

    操作过程 1 所有的配置都没有动过 vuecli的所以打包配置 2 npm run build打包 3 把打包的dist 所有文件 放到解压后的ngnix的html里 4 通过127 0 0 1 80 dist index html访问 情
  • 计算机怎么远程桌面,电脑怎么打开远程桌面连接功能

    远程桌面连接是电脑ip地址使用到最强大的功能 电脑怎么开启远程桌面连接呢 下面由学习啦小编为你整理了电脑怎么打开远程桌面连接功能的解决方法 希望对你有帮助 电脑打开远程桌面连接的方法如下 设置静态IP地址 1右键点击电脑桌面的 网络 进入
  • Idea卡在Resolving Maven dependencies的解决方案

    Idea卡在Resolving Maven dependencies的解决方案 在Reimpot All Maven Porjects时 如果项目过大 maven依赖过多 会直接卡在Resolving Maven dependencies这
  • Visual Studio 2022 升级不再附带 .NET Framework 4.5 这种古老的目标包了,本文帮你装回来...

    就在北京时间 2021 年 11 月 9 日凌晨 Visual Studio 2022 正式发布了 着急升级的小伙伴兴致勃勃地升级并卸载了原来的 Visual Studio 2019 后 发现自己的几个库项目竟然无法编译通过了 究其原因 是
  • Myeclipse中workspace打不开的处理办法

    当在Myeclipse中出现这种情况时 可进行如下操作 找到workspace中的下列文件 删除后 重启Myeclipse就可以了 转载于 https my oschina net mikezhaoweb blog 298347
  • Python之使用Python发送HTTP请求

    coding utf 8 import urllib urllib2 url http www love sysu com cloud data name 陈钰 id 12353032 para urllib urlencode data
  • 列表的合并与排序

    读入两行 两行的格式一样 都是用空格分隔的若干个整数 将这些数合并到一个列表中 降序排列后输出整个列表 提示 list1 list map int input split 读入一行由空格分隔的整数 将其存入list1列表中 输入 输入为两行
  • Flutter 设置Container高度自适应GridView和ListView

    参考 1 去掉Container的高度 2 添加下面语句 physics NeverScrollableScrollPhysics shrinkWrap true 完整代码如下 Widget imageSection1 imgPath im
  • ns3链路拥塞实验

    实验目的 收集和分析不同背景流下的路径丢包率与时延性能 拓扑结构 仿真网络拓扑 n0 n5 10 Mb s 2ms n1 n3 10Mb s 10ms n4 n6 n2 n7
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • css 预处理器

    由于多个项目中用到了sass和less 所以就学习了一下相关知识 记录下来方便随时查看 前言 css是用来编写网站样式 但是 其写法比较一成不变 如果想要使用 css 实现 js 一样的变量 常量等 就会比较臃肿 难以维护 所以 作为css
  • 使jira支持reopen率的统计

    jira本身并不能统计bug的reopen率 虽然bug工作流程中有reopen节点 只能借助第三方插件来处理 插件名称 Enhancer Plugin for JIRA 此插件支持自定义字段 自定义计数器等等高级操作 在插件管理中搜索插件
  • docker基础3——制作镜像(基于容器)

    文章目录 一 基本了解 1 1 镜像结构 1 2 docker存储驱动 1 2 1 AUFS 1 2 2 OverlayFS 1 2 3 DeviceMapper 1 3 镜像仓库 二 镜像制作 2 1 基于容器制作镜像 三 镜像导入与导出
  • 双指针的实践

    一 原理 双指针 指的是在遍历对象的过程中 不是普通的使用单个指针进行访问 而是使用两个相同方向 快慢指针 或者相反方向 对撞指针 的指针进行扫描 从而达到相应的目的 换言之 双指针法充分使用了数组有序这一特征 从而在某些情况下能够简化一些