【OJ刷题】双指针问题5

这里是阿川的博客,祝您变得更强

✨ 个人主页:在线OJ的阿川
💖文章专栏:OJ刷题入门到进阶
🌏代码仓库:


写在开头

现在您看到的是我的结论或想法但在这背后凝结了大量的思考、经验和讨论


在这里插入图片描述

在这里插入图片描述

目录

  • 1. 题目介绍
  • 2. 题目拆解
  • 3. 具体详情
  • 4. 具体代码


1. 题目介绍

难度:中
题目练习:三数之和
题目信息:给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。
举个例子: 具体如图1所示
在这里插入图片描述

图1 举个例子

2. 题目拆解

本质上:观察规律,双指针遍历判断
特点是:在组合搭配中有一定规律
解决方法:双指针算法,如图2所示
在这里插入图片描述

图2 双指针

3. 具体详情

1. 先进行排序
2. 固定一个数a,且固定时跳过重复固定值且该固定数大于小于0即可
3. 在该数后面的区间内,利用"双指针算法"遍历完整个数组找到两个的和等于-a即可,且在过程中找到一种结果之后,双指针要跳过重复元素,直到双指针相遇


4. 具体代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {// 排序sort(nums.begin(), nums.end());vector<vector<int>> cur;int n = nums.size();// 固定值并移动,双指针具体实现for(int i = 0; i < n ;){// 固定值大于0则双指针中不可能出现符合题目要求的可能if(nums[i] > 0) break;int left = i + 1, right = n - 1;// 利用"双指针算法"遍历完整个数组找到两个的和等于-固定值while(left < right){if(nums[left] + nums[right] > -nums[i]) right--;else if(nums[left] + nums[right] < -nums[i]) left++;else{cur.push_back({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--;}}i++;// 固定时跳过重复固定值while(i < n && nums[i] == nums[i - 1]) i++;}return cur;}
};

5. 夹带私货

若你能看到看到这篇文章且能看到这,则说明你我有缘留个关注吧,后面还会接着计算机408、底层原理、开源项目、以及数据、后端研发相关、实习、笔试/面试、秋招/春招、各种竞赛相关、简历相关、考研、学术相关……,祝你我变得更强


好的,到此为止啦,祝您变得更强
在这里插入图片描述

在这里插入图片描述

道阻且长 行则将至
个人主页:在线OJ的阿川大佬的支持和鼓励,将是我成长路上最大的动力 在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Mac下nvm无法安装node问题

背景 最近换用mac开发&#xff0c;然后使用nvm&#xff08;版本0.40.1&#xff09;进行node安装的时候出现了一些问题 使用 nvm ls-remote发现只有 iojs 版本 原因可能是nodejs升级了某个协议导致的 解决方案 可以使用 NVM_NODEJS_ORG_MIRRORhttp://nodejs.org/dist nvm ls-re…

关于一道逻辑思维训练题的理解(手表、闹钟、标准时间的骗局)

说有一块手表&#xff0c;比闹钟每时慢30秒&#xff0c;而闹钟比标准时间每时快30秒&#xff0c;那么&#xff0c;这块手表是准时的么 &#xff1f; 这道题就是个带时间刻度的四维骗局 就是个文字游戏 接下来我们来分析一下&#xff0c;为什么说它是个骗局&#xff0c;简直与…

初写MySQL四张表:(3/4)

我们已经完成了四张表的创建&#xff0c;学会了创建表和查看表字段信息的语句。 初写MySQL四张表:(1/4)-CSDN博客 初写MySQL四张表:(2/4)-CSDN博客 接下来&#xff0c;我们来学点对数据的操作&#xff1a;增 删 查&#xff08;一部分&#xff09;改 先来看这四张表以及相关…

Java入门,初识Java

Java背景知识 Java是早期美国 sun 公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。Java早期称为Oak&#xff08;中文翻译为&#xff1a;橡树&#xff09;&#xff0c;后期改名为Java。&#xff08;因为当时sun公司门口有很多…

【Linux系统编程】用互斥量和信号量加锁STL容器,避免并发问题

目录 引言 容器模型 容器代码 个人主页&#xff1a;东洛的克莱斯韦克-CSDN博客 引言 STL容器并没有保证线程安全&#xff0c;而大多数应用场景下&#xff0c;为了追求效率&#xff0c;多线程是必不可少的。而底层容器难免会有并发问题。从设计上来说要么在上层代码做加锁处…

Effective C++笔记之二十三:非void函数不写return

一.main函数 Qt Creator查看汇编的步骤如下 上图是g编译器下的汇编 eax就是main()函数的返回值 如果删掉return 0&#xff1b; 可以发现编译器还是把eax的值设为了0&#xff0c;由此可见&#xff0c;即使在main函数中不写return 0&#xff0c;编译器还是会默认添加个return 0。…

如何使用ssm实现一家运动鞋店的产品推广网站的设计

TOC ssm623一家运动鞋店的产品推广网站的设计jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xf…

手把手教你:在微信小程序中加载map并实现拖拽添加标记定位

本文将为大家详细介绍如何在微信小程序中加载map组件&#xff0c;并实现拖拽标记定位功能。 实现步骤 1、首先&#xff0c;我们需要在项目的app.json文件中添加map组件的相关配置。如下所示&#xff1a; {"pages": ["pages/index/index"],"permiss…

【网络安全 | 代码审计】PHP无参数RCE

未经许可,不得转载。 文章目录 无参数RCE代码审计1、利用Session ID实现无参数RCE2、利用get_defined_vars ()函数实现无参数RCE3、利用getallheaders()实现无参数RCE4、利用getenv()实现无参数RCE5、利用scandir()实现无参数RCE靶场实例无参数RCE 一般情况下,RCE需要通过传…

销管系统 —— P14 菜单项悬停高亮显示遇到的问题

悬停在子菜单背景颜色并没有显示&#xff0c;为什么&#xff1a; 什么是后代选择器 —— 选中父元素 后代中 满足条件的元素&#xff1b;这个子菜单menu—item它既满足上面的也满足下面的&#xff0c;按这个顺序的话&#xff0c;下面的就被覆盖了&#xff08;CSS优先级规则&…

godot——tween_method插值,如何处理多参数?参数位置怎么调?

知识点&#xff1a; tween_method()可以对方法的某一参数进行插值&#xff0c;并连续调用该方法。 如果方法有多个参数&#xff0c;可以用bind()提前绑定。 然而bind()绑定的参数会被放在参数列表的最后。如果我要插值的参数在参数列表后面&#xff0c;那么就会出问题。 …

FPGA-Vivado-IP核-虚拟输入输出(VIO)

VIO IP核 背景介绍 Vivado中的VIO&#xff08;Virtual Input/Output&#xff0c;虚拟输入/输出&#xff09; IP核是一种用于调试和测试FPGA设计的IP核。当设计者通过JTAG接口与FPGA芯片连接时&#xff0c;在Vivado的Verilog代码中添加VIO IP核&#xff0c;就可以让设计者与FPG…

从index_put出发全面学习cuda和pytorch技术

一 前言 深感目前对于cuda和pytorch所涉及知识的广度和深度,但一时又不知道该如何去学习,经过多日的考虑,还是决定管中窥豹,从一个算子出发,抽丝剥茧,慢慢学习,把学习中碰到的问题都记录下来,希望可以坚持下去。 二 函数功能描述 【torch算子】torch.index_put和tor…

LeetCode[简单] 283.移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 思路&#xff1a;利用快慢指针&#xff0c;快指针遍历数组&#xff0c;慢指针是非零元素索…

VMWare中的Centos8:Errors during downloading metadata for repository ‘appstream‘

在VMWare的环境中&#xff0c;安装和部署好Centos8&#xff0c;待设置好网络环境后&#xff0c;安装部署C开发和编译环境&#xff0c;遇到报错&#xff1a; dnf gcc gcc-c -y 解决问题的办法如下, 1. 进入仓库源文件夹&#xff1a;cd /etc/yum.repos.d/ 2. 修改镜像配置{这…

[Python可视化]数据可视化在医疗领域应用:提高诊断准确性和治疗效果

随着医疗数据的增长&#xff0c;如何从庞大的数据集中快速提取出有用的信息&#xff0c;成为了医疗研究和实践中的一大挑战。数据可视化在这一过程中扮演了至关重要的角色&#xff0c;它能够通过图形的方式直观展现复杂的数据关系&#xff0c;从而帮助医生和研究人员做出更好的…

鸿蒙开发之ArkUI 界面篇 二

鸿蒙App开发使用的是ArkUI(方舟开发框架)&#xff0c;构建页面最小的单位是“组件” “组件”分为基础“组件”和“容器组件”&#xff0c;基础“组件”像Image、Text、Button&#xff0c;“容器组件”像Row、Column&#xff0c;布局的思路&#xff0c;先有大框架、排版&#…

引领未来的数字化转型指南:全面解读《数字化专业知识体系》的核心策略与实践路径

数字化时代的企业生存之道 在全球商业环境迅速数字化的今天&#xff0c;企业的生存和发展面临着前所未有的挑战。技术的快速更替、市场的不确定性以及客户需求的多样化&#xff0c;迫使企业迅速调整战略和运营模式。《数字化专业知识体系》&#xff08;《Towards a Digital Pr…

基于python+django+vue的学生管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…

轻松上手!三大热门视频剪辑工具大PK!

视频剪辑是现代数字创作的重要组成部分&#xff0c;无论是专业影视制作还是日常生活的记录分享&#xff0c;一款合适的视频剪辑软件都能让你的作品更上一层楼。今天&#xff0c;我们就来聊聊几款市面上比较热门的视频剪辑软件&#xff0c;看看它们在视频剪辑中的表现如何。 一…