Leetcode 15. 三数之和(暴力->双指针)

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

1、暴力枚举(TLE--308 / 313 个通过的测试用例

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;int n=nums.size();// unordered_set<vector<int>>s;//暴力枚举每一种请情况for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){for(int k=j+1;k<n;k++){if(nums[i]+nums[j]+nums[k]==0){vector<int>tmp={nums[i],nums[j],nums[k]};sort(tmp.begin(),tmp.end());res.push_back(tmp);}}}}sort(res.begin(),res.end());res.erase(unique(res.begin(),res.end()), res.end());return res;}
};

2、双指针优化(固定起点,枚举每一个起点+双指针)

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {//先把数组排序sort(nums.begin(),nums.end());vector<vector<int>> res;int n=nums.size();// for(int i=0;i<n;i++)//     for(int j=i+1;j<n;j++)//         for(int k=j+1;k<n;k++){//             if(nums[i]+nums[j]+nums[k]==0){//                 res.push_back({nums[i],nums[j],nums[k]});//             }//         }for(int i=0;i<n;i++){if(nums[i]>0)break;//如果从i索引开始就小于0了,那么三数相加不可能等于0if(i-1>=0 && nums[i]==nums[i-1])continue;int l=i+1;int r=n-1;int t=-nums[i];while(l<r){if(nums[l]+nums[r]==t){res.push_back({nums[i],nums[l],nums[r]});while(l+1<n &&  nums[l+1]==nums[l])l++;while(r-1>=0 && nums[r-1]==nums[r])r--;l++;r--;}else if(nums[l]+nums[r]<t)l++;else r--;}}return res;}
};

注:题目来源于leecode,本人leecode题解链接:. - 力扣(LeetCode)

题目链接:. - 力扣(LeetCode)

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

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

相关文章

解决EasyPoi导入Excel获取不到第一列的问题

文章目录 1. 复现错误2. 分析错误2.1 导入的代码2.2 DictExcel实体类2.2 表头和标题3. 解决问题1. 复现错误 使用EasyPoi导入数据时,Excel表格如下图: 但在导入时,出现如下错误: name为英文名称,在第一列,Excel表格有值,但导入的代码中为null,就很奇怪? 2. 分析错误 …

机器学习中的激活函数

激活函数存在的意义&#xff1a; 激活函数决定了某个神经元是否被激活&#xff0c;当这个神经元接收到的信息是有用或无用的时候&#xff0c;激活函数决定了对这个神经元接收到的信息是留下还是抛弃。如果不加激活函数&#xff0c;神经元仅仅做线性变换&#xff0c;那么该神经网…

基于Ultrascale+系列GTY收发器8b/10b编码方式的数据传输(三)——利用In System IBERT优化信号质量

基于Ultrascale系列GTY收发器8b/10b编码方式的数据传输&#xff08;二&#xff09;——数据收发及上板测试 一文介绍了利用GTY高速收发器进行8B/10B编码数据收发的使用方式&#xff0c;本文继续介绍使用In System IBERT IP核构建ibert眼图测试&#xff0c;以及通过设置参数以优…

ArcGIS三维景观分层显示

今天将向大家介绍的事在ArcGIS中如何创建多层三维显示。 地表为影像的 地表为地形晕渲的 在土壤分层、油气分层等都有着十分重要的应用。下面我们具体来看看实现过程 一、 准备数据及提取栅格范围 我们这次准备的数据是之前GIS100例-30讲的案例数据。《ArcGIS三维影像图剖面图…

C语言 函数——代码风格

目录 基本的代码规范 程序版式 对齐&#xff08;Alignment&#xff09;与缩进&#xff08;indent&#xff09; 变量的对齐规则 空行——分隔程序段落的作用 代码行内的空格——增强单行清晰度 代码行 长行拆分 标识符命名规则 标识符命名的共性规则 windows应用程序…

发人深省:如果前端开发是青春饭,为何你的青春这么匆匆。

有很多人说前端开发是青春饭&#xff0c;干不了多久&#xff0c;很容易被取代&#xff0c;这就是危言耸听了。只要前端岗位在一天&#xff0c;这就不是青春饭&#xff1b;即便被取代&#xff0c;资深前端很快就会在别的地方找到自己立身之本&#xff0c; 反观哪些天天抱怨&…

【Excel2LaTeX】复杂表格制作的解决方案

刚开始用LaTeX写论文&#xff0c;遇到的第一道坎就是绘制表格&#xff0c;较小的普通表格可以通过简单的语法实现&#xff0c;但是较大的复杂的表格却让我无从下手。 Excel2LaTeX插件 这里介绍一种我用到非常顺手的工具&#xff1a;Excel2LaTeX插件&#xff0c;下载地址&#x…

C语言:文件操作(四)

目录 前言 6、文本文件和二进制文件 7、文件读取结束的判定 7.1 被错误使用的feof 8、文件缓冲区 总结 前言 接上篇&#xff0c;本篇要讲解的是文本文件和二进制文件的内容、文件读取结束的判定以及文件缓冲区。 6、文本文件和二进制文件 根据数据的组织形式&#xff0c;数…

嵌入式工程师如何摸鱼?

有老铁问我&#xff0c;做嵌入式开发要加班吗&#xff1f; 也不知道搞什么鬼&#xff0c;现在的年轻人对加班这么抵触。 我刚做开发那会&#xff0c;啥也不懂&#xff0c;每天基本都要加班到晚上7-9点不等&#xff0c;我并不抵触加班&#xff0c;因为早早回家&#xff0c;也没什…

HarmonyOS开发实战:【亲子拼图游戏】

概述 本篇Codelab是基于TS扩展的声明式开发范式编程语言编写的一个分布式益智拼图游戏&#xff0c;可以两台设备同时开启一局拼图游戏&#xff0c;每次点击九宫格内的图片&#xff0c;都会同步更新两台设备的图片位置。效果图如下&#xff1a; 说明&#xff1a; 本示例涉及使…

搜狗多线程长尾词挖掘软件-【批量挖掘搜狗大家还在搜和相关搜索长尾词】

搜狗多线程长尾词挖掘软件-【批量挖掘搜狗大家还在搜和相关搜索长尾词】介绍&#xff1a; 1、软件根据放入多个关键词批量多线程去搜狗搜索里拓搜狗大家还在搜和相关搜索。 2、搜狗大家还在搜和相关搜索长尾词质量好。 3、一个关键词可以拓19个高质量相关长尾词。 4、软件自…

msyql中SQL 错误 [1118] [42000]: Row size too large (> 8126)

场景&#xff1a; CREATE TABLE test-qd.eqtree (INSERT INTO test.eqtree (idocid VARCHAR(50) NULL,sfcode VARCHAR(50) NULL,sfname VARCHAR(50) NULL,sfengname VARCHAR(50) NULL,…… ) ENGINEInnoDB DEFAULT CHARSETutf8 COLLATEutf8_general_ci;或 alter table eqtre…