[C/C++] -- 双指针

1.简介

双指针技巧是一种常见的算法解题方法,通过使用两个指针在数据结构上同时移动,可以解决多种问题。这种技巧通常适用于数组、字符串和链表等数据结构,下面我将详细介绍双指针技巧的特点和应用场景:

特点:

  1. 快慢指针:其中一个指针移动速度快,另一个指针移动速度慢,通常用于解决链表中的环路检测、链表的中间节点等问题。
  2. 左右指针:分别位于数据结构的两端,根据问题的特点相向移动或同向移动,通常用于解决数组和字符串中的搜索、反转、合并等问题。
  3. 滑动窗口:维护一个区间,通常用于解决字符串和数组中的子串或子序列问题。

应用场景:

  1. 查找/搜索:对于有序数组,可以使用左右指针快速查找目标元素;对于无序数组,可以使用左右指针来判断是否存在特定的组合或满足条件的子数组。
  2. 去重/重复元素处理:使用快慢指针方法对数组或链表中的重复元素进行去重或处理。
  3. 反转/合并:通过左右指针方法实现数组、链表的反转或合并操作,例如合并两个有序链表、合并两个有序数组等。
  4. 滑动窗口:通过左右指针维护一个滑动窗口,解决字符串和数组中的子串或子序列问题,如最长无重复子串、最小覆盖子串等。

2.例题

三数之和

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
解释:
nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0 。
nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0 。
nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0 。
不同的三元组是 [-1,0,1] 和 [-1,-1,2] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int size = nums.size();if (size < 3)   return {};vector<vector<int>> res;sort(nums.begin(),nums.end());for (int i = 0;i < size;i++){if(nums[i] > 0)  return res;if(i > 0 && nums[i] == nums[i - 1]) continue;int left = i + 1;int right = size - 1;while (left < right){if(nums[left] + nums[right] > -nums[i])right--;else if(nums[left] + nums[right] < -nums[i])left++;else{res.push_back(vector<int>{nums[i],nums[left],nums[right]});left++;right--;while(left<right && nums[left] == nums[left - 1]) left++;while(left<right && nums[right] == nums[right + 1]) right--;}}}return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

综合实验---Web环境搭建

题目&#xff1a; 服务器IP地址规划&#xff1a;client&#xff1a;12.0.0.12/24&#xff0c;网关服务器&#xff1a;ens36:12.0.0.1/24、ens33&#xff1a;192.168.10.1/24&#xff0c;Web1&#xff1a;192.168.10.10/24&#xff0c;Web2&#xff1a;192.168.10.20/24&#xf…

pcl弧度角度换算:rad2deg,deg2rad

角度弧度换算公式: 代码及结果在:cmath 中cos sin等常用函数的坑(弧度角度换算)-CSDN博客 pcl也有自带的rad2deg,deg2rad: 头文件 #include<pcl/common/angles.h> 代码如下 #include <iostream> #include<pcl/common/angles.h> int main() {vector<…

3/13/24运算符、补码、整型、浮点型、汇编

目录 三目运算符 逗号运算符 自增自减运算符 位运算 运算符优先级 补码讲解 整型解析 溢出解析 浮点数IEEE754标准解析 浮点数精度丢失 真题 汇编指令 生成汇编方法 常用指令 三目运算符 条件运算符是C语言中唯一的三目运算符。通过判断问号之前的表达式的真假&…

【随笔记】小程序轮播图,一屏显示三个swiper-item

常见的轮播是一屏显示一个swiper-item,有的时候需要一屏显示三个swiper-item,左右两边都显示出一点 【目前小程序基础库2.12.3 效果正常,3.几的效果会有点不正常】 效果图 wxml <!-- 轮播begin --> <swiper wx:if="{{up_down}}" class="card-swipe…

【C++】thread 头文件无法正常使用问题

问题 当我使用MinGW GCC&#xff0c;在windows上编写C程序的时候&#xff0c;使用thread类会无法编译&#xff0c;有如下错误&#xff1a; 我使用的是c17 这个问题原因是MinGW GCC当前仍缺少标准C 11 及以上版本线程类的实现。 解决方案 Stackoverflow上的类似问题: 传送门…

a-table:实现跨域多选功能——基础积累

table组件跨页多选功能&#xff1a; html部分的代码&#xff1a; <a-tablesize"small"style"margin-top: 10px"rowKey"id":columns"columns":dataSource"dataSource":pagination"pagination":loading"l…

零基础自学C语言|自定义类型:联合与枚举

✈联合体 &#x1f680;联合体的类型声明 像结构体一样&#xff0c;联合体也是由一个或者多个成员构成&#xff0c;这些成员可以不同的类型。 但是编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块内存空间。所以联合体也叫&#xff1a;共用体。 给…

机试:计算第几天

问题描述: 代码示例: //计算第几天 #include <bits/stdc.h> using namespace std;int main(){cout << "输入样例" << endl; int year;int month;int day; cin >> year >> month >> day;int months1[12] {31,28,31,30,31,30,3…

Java错误:微服务报错Cannot execute request on any known serve

&#x1f414;问题内容 报Cannot execute request on any known server 这个错&#xff1a;连接Eureka服务端地址不对。 &#x1f414;解决方式 检查.yml文件或者.properties文件配置 下划线下划线后面的小写字母等同于去掉下划线大写下划线后面的字母&#xff08;驼峰原则&am…

抖音私信撤回还留痕迹吗?私信撤回有时间限制吗?

一、抖音私信撤回还留痕迹吗&#xff1f; 撤回痕迹&#xff1a;根据目前的情况来看&#xff0c;抖音私信撤回后不会留下明显的痕迹。当你撤回一条私信时&#xff0c;对方将无法再看到这条消息。在他们的聊天记录中&#xff0c;撤回的消息将不再显示。因此&#xff0c;从对方的…

ATFX:美国2月未季调核心CPI年率录得3.8%,低于前值0.1个百分点

ATFX汇市&#xff1a;据美国劳工部数据&#xff0c;美国2月未季调核心CPI年率&#xff0c;最新值3.8%&#xff0c;前值为3.9%&#xff0c;预期值3.7%&#xff0c;最新值低于前值0.1个百分点&#xff0c;意味着高通胀问题正在逐步缓解&#xff0c;最新值高于预期值&#xff0c;意…

Spring启动“--”设置参数没生效

现象 在idea中启动SpringBoot项目时&#xff0c;使用“--”设置的启动参数没有生效&#xff0c;如修改端口号“--server.port8082” 原因 排查发现是因为在使用SpringApplication.run启动项目时&#xff0c;没有将args参数传入run方法。 修复方案 SpringApplication.run参数中…

自动化运维工具 ---------------Ansible

一、Ansible 发展史及功能 作者&#xff1a;Michael DeHaan&#xff08; Cobbler pxe kikstar 与 Func 作者&#xff09;ansible 的名称来自科幻小说《安德的游戏》中跨越时空的即时通信工具&#xff0c;使用它可以在相距数光年的距离&#xff0c;远程实时控制前线的舰队战斗2…

C#中IEnumerable<string>和IList<string>的区别

在C#中&#xff0c;IEnumerable<string>和IList<string>是两种不同的接口&#xff0c;它们具有不同的特性和用途。 IEnumerable<string>: IEnumerable<string> 是一个最基本的接口&#xff0c;表示能够枚举一组字符串。它提供了一个用于迭代集合中元素…

智能分析与决策:电商平台利用API进行市场洞察和消费者行为研究

电商平台在当今竞争激烈的市场环境中&#xff0c;依赖于深入的市场洞察和消费者行为研究来制定智能决策。API&#xff08;应用程序编程接口&#xff09;在这一过程中扮演着至关重要的角色&#xff0c;它连接了不同的数据源和分析工具&#xff0c;为电商平台提供了实时的、全面的…

(Linux学习八)进程下,虚拟文件系统proc

一、进程 foreground fg :前台进程&#xff0c;是在终端中运行的命令&#xff0c;占领终端。 background bg &#xff1a;后台进程:没有控制终端&#xff0c;它不需要终端的交互。看不见&#xff0c;但是在运行 & //后台运行程序 jobs //查看进程 kill %1 //消灭后台进…

51WORLD正式落地中东,助力沙特伙伴与客户数字化升级!

近日&#xff0c;在被誉为中东“数字达沃斯”的LEAP科技展上&#xff0c;51WORLD首次震撼亮相Digital Twin Riyadh2924k㎡ 全要素城市底座、数字地球平台51Earth&#xff0c;向中东及全球科技从业者展现中国企业技术实力与创新能力。此外&#xff0c;以LEAP为起点&#xff0c;5…

Elastic Stack--04--ES中的检索方式、Query DSL

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.ES中的检索方式第一种方式GET bank/_search # 检索bank下的所有信息&#xff0c;包括 type 和 docsGET bank/_search?q*&sortaccount_number:asc 第二种方式…

Windows从0到1部署项目

文章目录 1.创建虚拟机2.文件的传输--共享文件夹共享文件夹的访问 3.安装jdk&#xff0c;Tomcat3.1jdk的安装与配置配置环境变量 3.2Tomcat的安装与配置 4.安装mysql数据库5.下载nginx6.虚拟域名 因为Windows项目部署有很多操作都是博主之前做过的了&#xff0c;所及就只放了博…

php7.3.4连接sqlserver(linux平台)

前言 有个项目需要手上laravel连接客户的sqlserver数据库读取数据&#xff0c;故在docker运行的php容器&#xff0c;需要增加扩展。 过程 容器是基于debian11 1.通过 curl 下载 Microsoft 的 GPG 密钥&#xff0c;并通过 apt-key add 添加到系统密钥链中&#xff0c;以便后续…