【LeetCode热题100】【双指针】三数之和

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

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

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

示例 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 。

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

题解

前有两数之和用哈希在O(n)的时间复杂度内解决,现有三数之和需要用到双指针在O(n²)内解决

暴力的话需要三层循环而且需要去重复

我们可以先从小到大排序一下元素,那么现在元素是有序的了,而且左边的比右边的小或者相等

如果某元素大于0了,那么这个元素后面是不会有答案出现了,因为后面的元素不会比前面的小

找到一个小于等于0的元素了,让左指针指向后面一个元素,右指针指向最大的元素,把他们相加起来,如果和等于0,那么这三个是一个答案存起来,继续看左边的元素往右有没有相同的元素,如果有的话更新一下左边指针,因为这三个数字的组合已经是答案了,相同的就是重复了,然后同样看右边的元素往左有没有相同的元素,有的话也更新一下

如果和不等于0,和比0小,那么移动左指针让候选元素变大,如果和比0大,那么移动右指针让候选元素变小

排序nlogn,遍历元素n,两层while循环因为循环条件都是一起的加起来也是n,所以就是n²

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {if(nums.size()<3)return {};sort(nums.begin(),nums.end());if(nums[0]>0) // 如果最小的都大于0了那么肯定没有return {};vector<vector<int>>answer;for(int i=0;i<nums.size();i++){if(i>0&&nums[i]==nums[i-1])  // 元素相同的不做判断continue;int left=i+1,right=nums.size()-1;  // 取左右双指针while(left<right){int sum=nums[i]+nums[left]+nums[right];if(sum==0){answer.push_back({nums[i],nums[left],nums[right]});while(left<right&&nums[left]==nums[left+1]){left++;}  // 左边相同的去掉while(left<right&&nums[right-1]==nums[right]){right--;}  // 右边相同的去掉left++;right--;}else if(sum<0){  // 和不为0但是小于0说明和太小了移动左指针变大left++;} else{  // 移动右指针变小right--;}}}return answer;}
};

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

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

相关文章

PTA 7-223 sdut-C语言实验-求阶乘(循环结构)

从键盘输入任意一个大于等于0的整数n&#xff0c;然后计算n的阶乘&#xff0c;并把它输出。 提示&#xff1a; 0&#xff01;是 1 。 输入格式: 输入任意一个大于等于0的整数n。 输出格式: 输出n&#xff01; 输入样例: 在这里给出一组输入。例如&#xff1a; 3输出样例…

Java开发中一些重要软件安装配置

Java技术栈中重要过程 1、JavaWeb1、开发工具VsCode的安装和使用2、Tomcat服务器3、nodejs的简介和安装4、Vite创建Vue3工程化项目ViteVue3项目的创建、启动、停止ViteVue3项目的目录结构 5、Maven安装和配置 1、JavaWeb 1、开发工具VsCode的安装和使用 1 安装过程 安装过程比…

python合并excel

0 思路 注意&#xff1a;此代码1&#xff0c;2是将多个excel合并到一个excel&#xff0c;3是根据某个键进行合并&#xff0c;针对键的合并需要使用merge函数&#xff0c;实现excel的vlookup功能 主要使用pandas操作excel&#xff0c;然后写入excel表 1. pandas读取excel后数据类…

OpenResty(nginx+lua+resty-http)实现访问鉴权

OpenResty(nginxluaresty-http)实现访问鉴权 最近用BI框架解决了一些报表需求并生成了公开链接&#xff0c;现在CMS开发人员打算将其嵌入到业务系统中&#xff0c;结果发现公开链接一旦泄露任何人都可以访问&#xff0c;需要实现BI系统报表与业务系统同步的权限控制。但是目前…

视频分割方法:批量剪辑高效分割视频,提取m3u8视频技巧

随着互联网的快速发展&#xff0c;视频已成为获取信息、娱乐、学习等多种需求的重要载体。然而&#xff0c;很多时候&#xff0c;需要的只是视频的一部分&#xff0c;这就要对视频进行分割。而m3u8视频是一种常见的流媒体文件格式&#xff0c;通常用于在线视频播放。本文将分享…

关于近期互联网行业收缩的一些看法

做为一个十几年的互联网从业者&#xff0c;感受到了近15年来互联网行业的大起大落&#xff0c;特别是疫情放后的几年&#xff0c;从国外到国内&#xff0c;从大公司到小公司&#xff0c;大家都在做降本增效。 从外部环境来讲&#xff1a; 全球经济复苏仍面临持续挑战&#xf…

【前端首屏加载速度优化(0): 谷歌浏览器时间参数】

DOMContentLoaded 浏览器已经完全加载了 HTML&#xff0c;DOM树构建完成&#xff0c;但是像是 <img> 和样式表等外部资源可能并没有下载完毕。 Load DOM树构建完成后&#xff0c;继续加载 html/css 中的外部资源&#xff0c;加载完成之后&#xff0c;视为页面加载完成。…

听说这样寄快递会很省钱!速来收藏!便宜寄快递!

哈喽&#xff0c;小伙伴们&#xff0c;今天介绍一个寄快递省钱的小妙招。话不多说&#xff0c;小编直接开整&#xff01; 在闪侠惠递这个快递折扣平台下单送快递&#xff0c;不仅方便&#xff0c;而且运费更便宜。平台整合了京东、顺丰、圆通、申通、极兔、等快递公司可供选择…

【学习笔记】混淆矩阵

混淆矩阵&#xff08;Confusion Matrix&#xff09;&#xff0c;又称为错误矩阵&#xff0c;是一种特别适用于监督学习中分类问题评估模型性能的工具。在机器学习领域&#xff0c;混淆矩阵能够清晰地显示算法模型的分类结果和实际情况之间的差异&#xff0c;常用于二分类和多分…

大数据运维

一、HDFS HDFS 下线节点 https://blog.csdn.net/weixin_44758876/article/details/122535840 https://blog.csdn.net/moyefeng198436/article/details/113652813 二、HBase 2.1、HBase hbck hbase org.apache.hbase.HBCK2 bypass -or 111887 111888 hbase org.apache.hbas…

任意文件上传漏洞实战和防范

文件上传漏洞广泛存在于Web1.0时代&#xff0c;恶意攻击者的主要攻击手法是将可执行脚本&#xff08;WebShell&#xff09;上传至目标服务器&#xff0c;以达到控制目标服务器的目的。 此漏洞成立的前提条件至少有下面两个&#xff1a; 1.可以上传对应的脚本文件&#xff0c;…

第一个小记录达成:第一个年费会员用户

早上看到&#xff0c;欸&#xff0c;有个用户好像充了 9.9 元&#xff0c;挺开心&#xff0c;刚刚看飞书消息&#xff0c;看到了这条分享给朋友&#xff0c;等等&#xff0c;是充值了 99 元&#xff0c;有个用户充了年费&#xff0c;偶买噶&#xff0c;开心 &#x1fae1; 这是…

华为OD机试 - 仿LISP运算 - 逻辑分析(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

hql面试题之上海某资深数仓开发工程师面试题-求不连续月份的月平均值

1.题目 A,B两组产品的月平均值&#xff0c;月平均值是当月的前三个月值的一个平均值&#xff0c;注意月份是不连续的&#xff0c;如果当月的前面的月份不存在&#xff0c;则为0。如A组2023-04的月平均值为2023年1月的数据加2023-02月的数据的平均值&#xff0c;因为没有其他月…

股票代码合法验证:python字符串str应用

从键盘输入六位股票代码字符串&#xff0c;判定合法并输出板块分类&#xff0c;否则输出“NO”。 (笔记模板由python脚本于2023年12月04日 19:19:07创建&#xff0c;本篇笔记适合熟悉python字符串和字典的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https:…

MySQL安装,建立,导入本地Txt文件

MySQL安装教程参照如下&#xff1a; Windows下MySQL的安装及初始化设置 - 简书 MySQL修改数据默认存储路径 MySQL修改数据默认存储路径_show global variables like %datadir%-CSDN博客 建立数据库 C:\>mysql -u testsql -p mysql> create database mysqldb; mysq…

Oracle 中换行chr(10)、回车chr(13)

一、前言 chr(n)&#xff1a;返回 ascii 值对应的字符。 ascii(char)&#xff1a;返回字符 char对应的ascii 值。 chr(n) 和 ascii(char) 作用刚好是相反的。 SQL> select chr(65) from dual; 控制台显示&#xff1a;ASQL> select ascii(A) from dual; 控制台显示&am…

API资源对象Deployment;API资源对象Service;API资源对象DaemonSet;API资源对象StatefulSet

API资源对象Deployment&#xff1b;API资源对象Service&#xff1b;API资源对象DaemonSet&#xff1b;API资源对象StatefulSet API资源对象Deployment Deployment YAML示例&#xff1a; vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata:labels:app: myng…

Spring Cloud + Vue前后端分离-在线课程介绍

第2章 使用Maven搭建SpringCloud项目 第3章 SpringBoot项目技术整合 第4章 使用Vue cli 4搭建管理控台 第5章 单表管理功能前后端开发 第6章 通用代码生成器开发 第7章 核心业务功能开发 第8章 文件上传功能开发 第9章 大文件断点续与极速秒传 第10章 基于阿里云OSS的文…

前端面试题(面试碰到的一些)(一)

1、浏览器的存储方式都有哪些? cookie: 优点——兼容性好&#xff0c;请求头自带cookie方便 。缺点——大小只有4k, 请求头加入 cookie 浪费流量&#xff08;多用于记录登录状态&#xff09; localStorage: 优点—— 操作方便&#xff0c;永久性存储&#xff…