leetcode(top 100) 三数之和 相向双指针

题目:

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

题解:

第一步先对数组排序,然后依次枚举每一个数然后用查找两数之和的办法查找是否有两个数与当前枚举的数相加等于0。我认为本题的难点在于,在实现上述目标的基础上加上不可包含重复的三元组,这里相当于是一个小的数学知识,a,b,c三个数和是定值,如果这三个数中有两个数不变,那第三个值怎么变都是一样的,所以要想是非重复的三元组,在找到一组答案后再找下一组时至少要有两个数是与上次是不一样的。

vector<vector<int>>ans;void f(int l,int r,vector<int>&arr,int k){ while(l<r){if(arr[l]+arr[r]+arr[k]>0)r-=1;else if(arr[l]+arr[r]+arr[k]<0)l+=1;else {ans.push_back({arr[k],arr[l],arr[r]});//找下一组不重复的三元组l++;r--;while(l<r&&arr[l]==arr[l-1]){l++;}while(l<r&&arr[r]==arr[r+1]){r--;}}}}vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());for(int i=0;i<nums.size()-2;i++){//相同的数只用枚举查找一次即可if(i&&nums[i]==nums[i-1])continue;f(i+1,nums.size()-1,nums,i);}return ans;}

时间复杂度:O(n)

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

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

相关文章

React组件卸载的几种情况

这里写目录标题 简介几种情况 简介 React 组件的卸载(unmounting)阶段是指组件从DOM中被移除的过程。 几种情况 一个组件在其生命周期内只会经历一次卸载阶段。以下是一些可能触发组件卸载的情况&#xff1a; 父组件重新渲染导致子组件消失&#xff1a; 如果父组件的渲染逻辑…

mac禁用电池睡眠-mac盒盖连接显示器

mac禁用电池睡眠-mac盒盖连接显示器-mac断点盒盖连接显示器 讲解&#xff1a;mac盒盖的时候连接显示器会睡眠并断开和显示器的连接&#xff0c;只有在电池->选项->选择使用电源适配器的时候防止睡眠&#xff0c;才可以连接电源线外界显示器 但是苹果的电池相当于手机电…

hdfs文件系统增删查原理

目录 1、hdfs读取文件原理 1.1、读取流程图解 1.2、架构层面读取流程详解 1.3、源码层面读取流程详解 2、hdfs写入文件原理 2.1、写入流程图解 2.2、架构层面写入流程 2.3、源码层面写入流程 3、hdfs删除文件原理 3.1、删除文件图解 3.2、架构层面删除流程 3.3、源码…

Gobject tutorial 七

The GObject base class GObject是一个fundamental classed instantiatable type,它的功能如下&#xff1a; 内存管理构建/销毁实例set/get属性方法信号 /*** GObjectClass:* g_type_class: the parent class* constructor: the constructor function is called by g_object…

docker封禁对外端口映射

docker比linux防火墙规则优先级要高&#xff0c;一旦在docker里面配置了对外服务端口的话在iptable里面封不掉&#xff0c;需要通过下面的方法进行封禁&#xff1a; 这里我的宿主机IP地址是10.5.1.244,docker 内部网络ip段是默认的172.17段的&#xff0c;以下为命令&#xff1…

云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长

竹叶青茶以其别具一格的风味与深厚的历史底蕴&#xff0c;一直被誉为茶中瑰宝。历经千年的传承与创新&#xff0c;竹叶青不仅坚守着茶叶品质的极致追求&#xff0c;更在数字化的浪潮中&#xff0c;率先打破传统&#xff0c;以科技力量赋能品牌&#xff0c;成为茶行业的领军者。…

常见的工时表管理难题及应对方法

工作日的时间都去哪儿了&#xff1f;很多人在执行任务时都会问这个问题。有一种可行方法可以跟踪工时&#xff0c;并将其用于最大限度提高工作效率。 这就是工时表管理。 它有助于跟踪团队在项目和任务上花费的时间&#xff0c;支持费用跟踪、考勤跟踪&#xff0c;允许自定义…

计算机视觉中,数据增强和扩充数据集规模的区别是什么?

数据增强和扩充数据集样本规模是两个常用于提高模型性能的方法&#xff0c;它们有着不同的目标和实现方式。以下是对它们的详细解释和比较&#xff1a; 数据增强&#xff08;Data Augmentation&#xff09; 定义&#xff1a; 数据增强是指在训练过程中对原始数据进行各种随机…

家长必备:超全的VIP硬笔书法课程(250课完结版),手把手教附可打印控笔素材!

今天要跟大家聊聊一个特别有意思的玩意儿——硬笔书法。你没听错&#xff0c;就是那种用钢笔、圆珠笔&#xff0c;甚至铅笔就能写出漂亮字的技艺。这可不仅仅是写字那么简单&#xff0c;它是一门艺术&#xff0c;一种生活的态度。 阿星记得小时候&#xff0c;爷爷总是拿着毛笔…

http缓存及http2配置

http缓存及http2配置极大提高了网页加载得速度 1.1 nginx安装 首先是需要安装nginx 去官网下载windows版本的安装包 nginx 命令 nginx start //启动 nginx -s stop nginx -s reload // 重新运行 tasklist /fi "imagename eq nginx.exe" //进程 把打包好的文件copy…

PyTorch -- RNN 快速实践

RNN Layer torch.nn.RNN(input_size,hidden_size,num_layers,batch_first) input_size: 输入的编码维度hidden_size: 隐含层的维数num_layers: 隐含层的层数batch_first: True 指定输入的参数顺序为&#xff1a; x&#xff1a;[batch, seq_len, input_size]h0&#xff1a;[batc…

使用密钥对登录服务器

目录 1、使用密钥文件登录服务器 2、登录成功画面&#xff1a; 3、如若出现以下状况&#xff0c;则说明密钥文件登录失败 1、使用密钥文件登录服务器 首先需要上传pem文件 2、登录成功画面&#xff1a; 3、如若出现以下状况&#xff0c;则说明密钥文件登录失败 解决方法&…

嵌入式技术学习——Linux环境编程(高级编程)——shell编程

一、shell编程的基础介绍 1.为什么要进行shell编程? 在Linux系统中&#xff0c;虽然有各种各样的图形化接口工具&#xff0c;但是shell仍然是一个非常灵活的 工具。 Shell不仅仅是命令的收集&#xff0c;而且是一门非常棒的编程语言。 您可以通过使用shell使大量的任务自动化…

Django:如何将多个数据表内容合在一起返回响应

一.概要 Django写后端返回响应时&#xff0c;通常需要返回的可能不是一个数据表的内容&#xff0c;还包括了这个数据表的外键所关联的其他表的一些字段&#xff0c;那该如何做才能把他们放在一起返回响应呢&#xff1f; 二.处理方法 在这里我有三个数据表 第一个是航空订单&…

内聚性越高,模块独立性越强

内聚性&#xff08;Cohesion&#xff09;是衡量模块内部元素彼此关联程度的指标&#xff0c;而模块独立性&#xff08;Coupling&#xff09;则是指模块之间相互依赖的程度。这两个概念在软件工程中是评估设计质量的重要标准。 ### 内聚性&#xff1a; - **高内聚性**意味着模块…

内核学习——0、内核各类机制

1、应用读取驱动四种基本方式&#xff1a;阻塞、非阻塞、poll、异步通知 驱动构造file_operation结构体&#xff0c;里面有open、read、wirte等函数 查询&#xff1a;相当于应用程序非阻塞方式&#xff0c; O_NONBLOCK 休眠–唤醒&#xff1a;相当于应用程序阻塞方式 poll方式…

mfc140.dll电脑文件丢失的处理方法,这4种方法能快速修复mfc140.dll

mfc140.dll文件是一个非常重要的dll文件&#xff0c;如果它丢失了&#xff0c;那么会严重的影响程序的运行&#xff0c;这时候我们要找方法去修复mfc140.dll这个文件&#xff0c;那么你知道怎么修复么&#xff1f;如果不知道&#xff0c;那么不妨看看下面的mfc140.dll文件丢失的…

【DAMA】掌握数据管理核心:CDGA考试指南

引言&#xff1a;        在当今快速发展的数字化世界中&#xff0c;数据已成为组织最宝贵的资产之一。有效的数据管理不仅能够驱动业务决策&#xff0c;还能提升竞争力和市场适应性。DAMA国际一直致力于数据管理和数字化的研究、实践及相关知识体系的建设。秉承公益、志愿…

集合系列(二十六) -利用LinkedHashMap实现一个LRU缓存

一、什么是 LRU LRU是 Least Recently Used 的缩写&#xff0c;即最近最少使用&#xff0c;是一种常用的页面置换算法&#xff0c;选择最近最久未使用的页面予以淘汰。 简单的说就是&#xff0c;对于一组数据&#xff0c;例如&#xff1a;int[] a {1,2,3,4,5,6}&#xff0c;…

git从master分支创建分支

1. 切换到主分支或你想从哪里创建新分支 git checkout master 2. 创建并切换到新的本地分支 develop git checkout -b develop 3. 将新分支推送到远程存储库 git push origin develop 4. 设置本地 develop 分支跟踪远程 develop 分支 git branch --set-upstream-toorigi…