每天一道算法题(六)——返回一组数字中所有和为 0 且不重复的三元组

文章目录

  • 前言
  • 1、问题
  • 2、示例
  • 3、解决方法
  • 4、效果
  • 5、注意点


前言

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


1、问题

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。
请你返回所有和为 0 且不重复的三元组。

2、示例

示例 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、解决方法

let nums = [-1,0,1,2,-1,-4];
var threeSum = function(nums) {let newArray = []; // 1-1:定义一个空数组接收返回的数据let len = nums.length; // 1-2:获取传入输入数组的长度if(nums == null || len < 3) return newArray; // 2:如果数组为null或者数组的长度小于3 返回空数组nums.sort((a,b)=>a-b); // 3:将传入数组从小到大排序for(let x =0;x<len;x++){if(nums[x] > 0) break // 4:如果当前项大于0,三数之和不可能等于0,直接结束循环if (x > 0 && nums[x] == nums[x-1])continue; // 注意点:若x项和x的前一项相等,会导致返回数据重复了let y = x+1let z = len-1// 5-0循环判断第n+1项 是否小于 总长度-1(最后一项)while(y < z){// 5-1-1:定义一个三数之和const sum = nums[x] + nums[y] + nums[z];// 5-1-2: 如果三数之和等于0,说明符合条件,添加到新数组中if(sum === 0){newArray.push([nums[x], nums[y],nums[z]])// 5-1-4注意点:由于数组本身不去重,导致y和z容易重复// 若其中y及其下一项或z及其前一项相等则会导致返回数组重复while (y<z && nums[y] == nums[y+1]){y++;}while (y<z && nums[z] == nums[z-1]){z--;}// 5-1-3:如果三数之和符合,那么找符合的当前下一项和最后一项的前一项y++;z--;} else if(sum < 0){// 5-2:如果三数之和小于0,找排序后的下一项y++} else if(sum > 0){// 5-3:如果三数之和大于0,找排序后最大的前一项(如示例的排序后找完2后找1)z--}}}console.log('res', newArray);
};
threeSum(nums);

4、效果

在这里插入图片描述

5、注意点

在这里插入图片描述

如果你不加下面截图的代码,你的结果如上图所示

在这里插入图片描述

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

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

相关文章

WMS仓库管理系统库位分配规划

分配说明 每个商品必须至少有一个分拣位&#xff08;整箱或拆零均可&#xff09;如果只设了拆零分拣位&#xff0c;则入库不分配存储位&#xff0c;只上拆零分拣位&#xff0c;对于DPS分拣商品是一品固定一个货位&#xff0c;对于RF分拣商品是动态分配货位&#xff0c;一个商品…

记录我常用的免费API接口

目录 1.随机中英文句子 2.随机中英文句子&#xff08;带图片和音频&#xff09; 3.随机一句诗 4.随机一句话 5.随机一句情话 6. 随机一句舔狗语录 7.历史上的今天 8.获取来访者ip地址 9&#xff1a;获取手机号信息 10. 垃圾分类查询 11.字典查询 12.QQ信息查询 1.随…

golang学习笔记——条件表达式

文章目录 条件表达式if 语句的语法复合 if 语句 条件表达式 在任何编程语言中&#xff0c;最基本的控制流都是 if/else 语句。 在 Go 中&#xff0c;if/else 语句非常简单。 但是&#xff0c;你需要先了解一些差异&#xff0c;然后才能得心应手地编写 Go 程序。 让我们看看 i…

JAVA Web应用常见漏洞与修复建议

背景&#xff1a; 在工作中&#xff0c;我们的交付团队在交付项目时&#xff0c;可能会遇到甲方会使用一些第三方工具&#xff08;奇安信等&#xff09;对项目代码进行扫描&#xff0c;特别是一些对安全性要求比较高的企业&#xff0c;比如涉及到一些证券公司、银行、金融等。他…

【网络学习笔记】

记录一下关于域名&#xff0c;dns&#xff0c;反向代理知识的一些内容 通过阿里云函数进行反向代理 阿里云函数计算fanxiangdaili 逻辑 和cloudflare的workers的差不多&#xff08;前几天突然不能用了&#xff0c;使用魔法还能用&#xff0c;不过今天又莫名其妙恢复了&#xf…

基础组件-流量回放(全链路流量回放预研)

一、调研 日常测试工作中&#xff0c;遇到问题如下&#xff1a; 1、服务架构升级或者重构&#xff0c;需要对原有的接口做全量回归 2、对于业务逻辑复杂的场景&#xff0c;每个迭代版本都需要大量的时间进行回归测试 3、编写自动化用例时复杂场景造数麻烦&#xff0c;日常自动…

Mybatis-Plus《学习笔记 22版尚硅谷 》——感谢【尚硅谷】官方文档

Mybatis-Plus《学习笔记 22版尚硅谷 》 一、MyBatis-Plus1.简介2.特性3.支持数据库4.框架结构5.官方地址 二、入门案例1.开发环境2.建库建表3.创建工程4.配置编码5.测试查询 三、增删改查1.BaseMapper<T>2.调用Mapper层实现CRUD2.1 插入2.2 删除a、根据ID删除数据b、根据…

单元测试实战(三)JPA 的测试

为鼓励单元测试&#xff0c;特分门别类示例各种组件的测试代码并进行解说&#xff0c;供开发人员参考。 本文中的测试均基于JUnit5。 单元测试实战&#xff08;一&#xff09;Controller 的测试 单元测试实战&#xff08;二&#xff09;Service 的测试 单元测试实战&am…

Node.js之TCP(net)

Hi I’m Shendi Node.js之TCP&#xff08;net&#xff09; 最近使用Nodejs编写程序&#xff0c;需要用到自己编写的分布式工具&#xff0c;于是需要将Java版的用NodeJs重新写一遍&#xff0c;需要使用到TCP通信&#xff0c;于是在这里记录下Node.js TCP 的使用方法 依赖 需要使…

【Python进阶】近200页md文档14大体系知识点,第4篇:linux命令和vim使用

本文从14大模块展示了python高级用的应用。分别有Linux命令&#xff0c;多任务编程、网络编程、Http协议和静态Web编程、htmlcss、JavaScript、jQuery、MySql数据库的各种用法、python的闭包和装饰器、mini-web框架、正则表达式等相关文章的详细讲述。 全套Python进阶笔记地址…

黑马程序员 计算机网络(笔记)

参考文章&#xff1a;【黑马程序员】计算机网络概述~ 程序员必须掌握的入门基础知识&#xff01; 参考文章&#xff1a;黑马程序员Linux运维工作场景解决方案零基础到就业 参考文章&#xff1a;网络安全运维进阶教程&#xff0c;运维工程师深度学习教程 文章目录 linux入门到…

455. 分发饼干 --力扣 --JAVA

题目 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff0c;都有一个尺寸 …

Jenkinsfile+Dockerfile前端vue自动化部署

前言 本篇主要介绍如何自动化部署前端vue项目 其中&#xff0c;有两种方案&#xff1a; 第一种是利用nginx进行静态资源转发&#xff1b;第二种方案是利用nodejs进行启动访问&#xff1b; 各个组件版本如下&#xff1a; Docker 最新版本&#xff1b;Jenkins 2.387.3nginx …

【华为OD机试高分必刷题目】洗衣服(JavaPythonC++贪心算法实现)

🚀你的旅程将在这里启航!本专栏所有题目均包含优质解题思路,每篇都用了Java&Python&C++分别解题,高质量解题代码,详细代码讲解,助你深入学习,高分通过! 文章目录 【华为OD机试高分必刷题目】洗衣服(Java&Python&C++贪心算法实现)题目描述解题思路Py…

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用

基于STC12C5A60S2系列1T 8051单片的模数芯片ADC0809实现模数转换应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍模数芯片ADC0809介绍通过模数芯片ADC0809把电压模…

Flutter笔记:拖拽手势

Flutter笔记 拖拽手势 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/134485123 目 录 1. 概述2. 垂直拖…

Adobe Illustrator——原创设计的宝藏软件

今天&#xff0c;我们来谈谈一款在Adobe系列中曾经多次给大家都提到的原创性极强的设计理念丰富的矢量图形编辑软件——Adobe Illustrator。 Adobe Illustrator&#xff0c;其定位是一款与Photoshop相类似对矢量图形进行编辑的软件。 Adobe Illustrator&#xff0c;作为全球最著…

whisper large-v3 模型文件下载链接

#源码里找到的_MODELS {"tiny.en": "https://openaipublic.azureedge.net/main/whisper/models/d3dd57d32accea0b295c96e26691aa14d8822fac7d9d27d5dc00b4ca2826dd03/tiny.en.pt","tiny": "https://openaipublic.azureedge.net/main/whisp…

Linux三剑客

Linux三剑客 Linux三剑客是指awk、sed和grep&#xff0c;它们是在Linux和Unix系统中常用的文本处理工具。 - awk是一种强大的文本处理工具&#xff0c;可以根据指定的规则对文本进行分析和处理。它可以按列或字段进行操作&#xff0c;并支持自定义脚本编程。 - sed是一种流编…

openssl + 3DES开发实例(linux)

文章目录 一、3DES介绍3DES 的特点&#xff1a;3DES 加密的步骤&#xff1a;3DES 的应用场景&#xff1a; 二、3DES原理1. DES 原理回顾&#xff1a;2. 3DES 原理&#xff1a;3. 3DES 的加密流程&#xff1a; 三、openssl 3DES开发实例 一、3DES介绍 3DES&#xff08;Triple …