力扣 15.三数之和

news/2025/2/15 1:39:10/

题目:

给你一个整数数组 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 。

分析:

先排序使数组元素递增。第一个指针从小到大枚举数组中不重复的元素,此时就可以转换成两数之和,在数组的剩余元素中查找两个元素,使其之和等于该枚举元素的相反数。

去重操作:需要判断当前枚举的元素和上一个元素是不是相同,如果相同就跳过,避免找重复的三元组。

代码

class Solution {public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>>res;sort(nums.begin(),nums.end());//该提题的思路是先枚举一个数,找剩余的两个数,将三数之和转换成两数之和int size=nums.size();for(int first=0;first<size;++first){//判断该数是否被枚举过,避免出现重复值if(first>0&&nums[first]==nums[first-1]){continue;}if(nums[first]>0) break;int tmp=-nums[first];int third=size-1;//固定第三个值//转换成两数之和,从剩余的数组元素中找到两个数的和=tmpfor(int second=first+1;second<size;++second){//同理,枚举第二个值的时候,也需要避免找重复的值if(second>(first+1)&&nums[second]==nums[second-1]){continue;}while(second<third&&nums[second]+nums[third]>tmp)//大了,往小移动。否则就是小了,往大移动{--third;}if(second==third)//此时的second即使在小的值也没有找到两数相加<=tmp,后续增大更不可能会有,退出循环{break;}if(nums[second]+nums[third]==tmp){vector<int>vec;vec.push_back(nums[first]);vec.push_back(nums[second]);vec.push_back(nums[third]);res.push_back(vec);}}}return res;}};


http://www.ppmy.cn/news/1572118.html

相关文章

基于 GEE 计算研究区年均地表温度数据

目录 1 代码解析 2 完整代码 3 运行结果 1 代码解析 &#xff08;1&#xff09;定义研究区&#xff1a; // 研究区的范围需要自己提前上传 var dataset table;// 将研究区显示在中心&#xff0c;后面的数字为缩放等级&#xff0c;范围从1 - 24 Map.centerObject(dataset,…

excel高级求和SUMIFS函数,类似数据库group by操作

文章目录 1、SUMIFS函数2、一个条件的例子3、两个条件的例子 1、SUMIFS函数 它允许你指定多个条件&#xff0c;并只对那些满足所有这些条件的单元格进行求和操作。语法SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)sum_range: 需要求和的…

开源video-subtitle-master 视频转字幕,字幕翻译软件

项目简介 批量为视频生成字幕&#xff0c;并可将字幕翻译成其它语言。这是在之前的一个开源项目 VideoSubtitleGenerator 的基础上&#xff0c;制作成的一个客户端工具&#xff0c;以方便更多朋友们的使用。 &#x1f4a5;特性 它保留了之前 VideoSubtitleGenerator 这个命令行…

Docker 初学者教程

Docker 初学者教程 1. Docker 简介 Docker 是一个开源的应用容器引擎&#xff0c;允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。 容器与虚拟机不同&#xff0c;它们共享宿主机的操作系统内核&#xff0c;因此更加轻量且启动迅速。 1.1 基本概念 镜像&#x…

分布式微服务接口基于多线程进行性能优化

1.使用多线程与futureTask进行进行优化 1.1 实现流程图 1.2 代码逻辑模拟实现 public class OrderService {Resourceprivate RemoteService remoteservice;//远程过程调用(模拟类)Resourceprivate ExecutorService executorService;public Object order( long userId){JsonOb…

IDEA中列举的是否是SpringBoot的依赖项的全部?在哪里能查到所有依赖项,如何开发自己的依赖项让别人使用

在 IntelliJ IDEA 中列举的依赖项并不一定是 Spring Boot 项目的全部依赖项。IDEA 通常只显示你在 pom.xml&#xff08;Maven&#xff09;或 build.gradle&#xff08;Gradle&#xff09;中显式声明的依赖项&#xff0c;而这些依赖项本身可能还会引入其他传递性依赖。 1. 如何…

MySQL Workbench安装教程以及菜单汉化

WorkBench的下载 直接给下载MySql WorkBench的链接&#xff0c;直接进入正题&#xff1a;MySQL :: Download MySQL Workbench[这里是图片001]https://dev.mysql.com/downloads/workbench/进入了下载界面&#xff1a; &#xff08;安装路径自己看着办&#xff0c;注意安装路径不…

cnn以及例子

cnn CNN 即卷积神经网络&#xff08;Convolutional Neural Network&#xff09;&#xff0c;是一种专门为处理具有网格结构数据&#xff08;如图像、音频&#xff09;而设计的深度学习模型&#xff0c;在计算机视觉、语音识别等诸多领域都有广泛应用。以下是 CNN 的详细介绍&a…