当前位置: 首页 > news >正文

15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/3sum

题解

思路

  1. 开头容易让人想到三层循环+hash去重,但时间复杂度和空间消耗比较大

  2. 使用排序+双指针;达到去除重复值的作用

  3. 还要明确几个条件:

    • 数组为空或数组长度小于三
    • 排序后,最小值为正数,就不可能存在想加为0 的情况
    • 有连续重复的数字,要往后移,这样就能保证去重的效果
    • 若三个数组位的值想加等于0;还要考虑他们之后的情况,是否又有重复的值
    • 若三个数组位的值相加小于零,要考虑将L向后移一位
    • 若三个数组位的值相加大于零,要考虑将R向前移一位
class Solution {public static List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ans=new ArrayList();int len=nums.length;if(nums==null||len<3){return ans;//如果数组的长度小于3 或者数组为空,返回值为空}//对数组排序Arrays.sort(nums);//时间复杂度为nlognfor(int i=0;i<len;i++){if(nums[i]>0){break;}//最小的都大于0,不可能存在加起来等于0的情况if(i>0&&nums[i]==nums[i-1]) continue;//相邻值相同,去重int L=i+1;int R=len-1;while(L<R){int sum=0;sum=nums[i]+nums[R]+nums[L];if(sum==0){ans.add(Arrays.asList(nums[i],nums[L],nums[R]));while(L<R&&nums[L]==nums[L+1]) L++;while(L<R&&nums[R]==nums[R-1]) R--;L++;R--;}else if(sum<0) L++;else if(sum>0) R--;}}return ans;}
}

相关文章:

15. 三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 …...

40-Golang中的文件

Golang中的文件基本介绍文件的打开和关闭读文件操作应用实例写文件操作实例判断文件是否存在基本介绍 文件在程序中是以流的形式存在的 流&#xff1a;数据在数据源(文件)和程序(内存)之间经历的路程 输入流&#xff1a;数据从数据源到程序之间的路径 输出流&#xff1a;数据…...

Springboot整合RabbitMQ并使用

1、Springboot整合RabbitMQ 1、引入场景启动器 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency>引入AMQP场景启动器之后&#xff0c;RabbitAutoConfiguratio…...

Java中方法引用(引用静态方法、引用成员方法(引用其他类的成员方法、引用本类的成员方法、引用父类的成员方法)、引用构造方法、其他调用方式、小练习)

方法引用&#xff1a;把已经存在的方法拿过来用&#xff0c;当作函数式接口中抽象方法的方法体 我们前面学到Arrays工具类中的sort方法&#xff0c;当我们需要指定排序规则时&#xff0c;需要传递Comparator接口的实现类对象&#xff0c;我们之前使用匿名内部类类的形式作为参…...

整理了100道关于Python基础知识的练习题,记得收藏~

实例1.数字组合 题目&#xff1a; 有四个数字&#xff1a;1、2、3、4&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;各是多少&#xff1f; 程序分析&#xff1a; 遍历全部可能&#xff0c;把有重复的剃掉。 total0 for i in range(1,5):for j in range(…...

OSG三维渲染引擎编程学习之七十七:“第七章:OSG场景图形交互” 之 “7.8 场景交互”

目录 第七章 OSG场景图形交互 7.8 场景交互 7.8.1 osgGA库 7.8.2 事件消息处理 7.8.3 程序抓图示例...

797.差分

输入一个长度为 n的整数序列。 接下来输入 m个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c。 请你输出进行完所有操作后的序列。 输入格式 第一行包含两个整数 n和 m。 第二行包含 n个整数&#xff0c;表示整数序列。 …...

为什么说要慎用BeanUtils,因为性能真的拉跨

1 背景之前在专栏中讲过“不推荐使用属性拷贝工具”&#xff0c;推荐直接定义转换类和方法使用 IDEA 插件自动填充 get / set 函数。不推荐的主要理由是&#xff1a;有些属性拷贝工具性能有点差有些属性拷贝工具有“BUG”使用属性拷贝工具容易存在一些隐患&#xff08;后面例子…...

【项目设计】高并发内存池(六)[细节优化+测试]

&#x1f387;C学习历程&#xff1a;入门 博客主页&#xff1a;一起去看日落吗持续分享博主的C学习历程博主的能力有限&#xff0c;出现错误希望大家不吝赐教分享给大家一句我很喜欢的话&#xff1a; 也许你现在做的事情&#xff0c;暂时看不到成果&#xff0c;但不要忘记&…...

同模块设置不同应用主题方案

有时候公司内部会有不同应用但是有部分模块功能一样&#xff0c;只根据应用角色有些细节逻辑区分的场景。这时候往往采用模块化采用以应用至不同的APP。如果APP主题不一致&#xff0c;该如果解决。 方案&#xff1a; 在不同应用的config.gradle 下面根据不同应用定义不同的a…...

centos7 安装 hyperf

​​​​​​PHP > 7.4 Swoole PHP 扩展 > 4.5&#xff0c;并关闭了 Short Name OpenSSL PHP 扩展 JSON PHP 扩展 PDO PHP 扩展 Redis PHP 扩展 Protobuf PHP 扩展 composer create-project hyperf/hyperf-skeleton 推荐安装项 全部选n php.ini [swoole] extens…...

RZ/G2UL核心板-40℃低温启动测试

1. 测试对象HD-G2UL-EVM基于HD-G2UL-CORE工业级核心板设计&#xff0c;一路千兆网口、一路CAN-bus、 3路TTL UART、LCD、WiFi、CSI 摄像头接口等&#xff0c;接口丰富&#xff0c;适用于工业现场应用需求&#xff0c;亦方便用户评估核心板及CPU的性能。HD-G2UL-CORE系列工业级核…...

PyQt5可视化 7 饼图和柱状图实操案例 ①Qt项目的创建

目录 一、新建Qt项目 二、添加组件和布局 三、添加资源 1. 新建资源文件 2. 添加图标资源 四、frameHead 1. toolBtnGenData 2. toolBtnCounting 3. comboTheme 4. comboAnimation 5. Horizontal Spacer 6. toolBtnQuit 7. 设置toolBtnQuit的功能 8. frameHead的…...

0104路径搜索和单点路径-无向图-数据结构和算法(Java)

文章目录2 单点路径2.1 API2.2 算法实现后记2 单点路径 单点路径。给定一幅图和一个起点s&#xff0c;回答“从s到给定的目的顶点v是否存在一条路径&#xff1f;如果有&#xff0c;找出这条路径。”等类似问题。 2.1 API 单点路径问题在图的处理邻域中十分重要。根据标准设计…...

Maxscale读写分离实施文档

Maxscale介绍 MaxScale是maridb开发的一个mysql数据中间件&#xff0c;其配置简单&#xff0c;能够实现读写分离&#xff0c;并且可以根据主从状态实现写库的自动切换。 使用Maxscale无需对业务代码进行修改&#xff0c;其自带的读写分离模块&#xff0c;能够解析SQL语句&…...

websocket实现一个简单聊天框

websoket在客户端的使用 事件&#xff1a;open/message/error/close 方法&#xff1a;send/close var socket new WebSocket(url)// 服务连接成功时触发 socket.addEventListener(open, function() {console.log("连接成功了") })// 主动给websocket发消息 socket…...

Docker-安装应用

一、安装Tomcat 注意:新版Tomcat安装之后启动访问会出现404 修改:删除原有的webapps目录,修改webapps.dist为webapps 免修改版本:billygoo/tomcat8-jdk8 二、安装Mysql 1、安装 拉取镜像 docker pull mysql:5.7 运行镜像…...

Web3中的营销:如何在2023年获得优势

Mar. 2022, Daniel在过去的一年里&#xff0c;让人们对你的Web3项目或协议感兴趣已经变得越来越有挑战性。许多曾经充满希望的项目因为各种不同的原因&#xff0c;都在熊市中倒下了。然而&#xff0c;那些迄今为止幸存下来的项目都有一个共同点&#xff1a;强大的社区。Web3营销…...

Java中==和equals区别

文章目录Java中和equals区别1. Integer中和equals的问题1.1 Integer类型且不是通过new创建的比较1.2 手动new Integer()创建的比较1.3 Integer和int比较2. String中和equals的问题3. DemoJava中和equals区别 equals是方法&#xff0c;是运算符&#xff1a; 如果比较的对象是基…...

计算机科学导论笔记(三)

五、计算机组成 计算机组成部件可以分为三大类&#xff08;子系统&#xff09;&#xff1a;中央处理单元&#xff08;CPU&#xff09;、主存储器和输入/输出子系统。 5.1 中央处理单元&#xff08;CPU&#xff09; 中央处理单元用于数据的运算&#xff0c;分为算术逻辑单元&a…...

从Landsat 8数据到地表温度:劈窗算法实战解析

1. 从Landsat 8数据到地表温度&#xff1a;劈窗算法实战解析 地表温度是研究城市热岛效应、农业干旱监测、气候变化等领域的重要参数。Landsat 8卫星搭载的热红外传感器TIRS&#xff08;Thermal Infrared Sensor&#xff09;提供了两个热红外波段&#xff08;B10和B11&#xff…...

【Gemini JavaScript开发支持终极指南】:20年谷歌AI工程师亲授7大避坑法则与实时调试秘技

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini JavaScript开发支持概览 Gemini API 的 JavaScript 集成能力 Google Gemini 提供了官方 Node.js SDK&#xff08; google/generative-ai&#xff09;&#xff0c;支持在服务端与浏览器环境中调…...

Illustrator智能对象替换引擎:企业级设计自动化的技术杠杆

Illustrator智能对象替换引擎&#xff1a;企业级设计自动化的技术杠杆 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 技术价值宣言 在数字设计工业化时代&#xff0c;品牌资产管理…...

开源游戏串流革命:Sunshine如何重新定义家庭游戏共享体验

开源游戏串流革命&#xff1a;Sunshine如何重新定义家庭游戏共享体验 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 在游戏设备日益多样化的今天&#xff0c;你是否曾想过将高性能…...

手把手教你给天邑TY1608机顶盒刷机(S905L3B芯片,支持RTL8822CS/MT7668无线模块)

天邑TY1608机顶盒刷机全攻略&#xff1a;从零开始玩转S905L3B芯片 第一次拿到天邑TY1608机顶盒时&#xff0c;你可能被它原厂系统的各种限制所困扰——预装软件无法卸载、广告弹窗频繁出现、存储空间严重不足。这款搭载Amlogic S905L3B芯片的设备&#xff0c;配合RTL8822CS或MT…...

从零部署noVNC:一次完整的远程桌面服务搭建与排错实录

1. 为什么选择noVNC&#xff1f; 最近在帮朋友部署远程桌面服务时&#xff0c;发现很多传统VNC方案都需要安装客户端&#xff0c;操作复杂不说&#xff0c;兼容性还差。直到发现了noVNC这个神器&#xff0c;它直接用浏览器就能访问远程桌面&#xff0c;彻底解决了跨平台访问的痛…...

Windows键盘记录器:为什么需要、它是什么、以及如何正确使用

Windows键盘记录器&#xff1a;为什么需要、它是什么、以及如何正确使用 【免费下载链接】keylogger Keylogger for Windows. 项目地址: https://gitcode.com/gh_mirrors/keylogg/keylogger 在当今数字化时代&#xff0c;键盘记录器作为系统监控和用户行为分析工具&…...

从丝杆到直线电机:半导体运动台驱动技术演进与选型指南

1. 半导体运动台驱动技术的核心挑战 在半导体制造领域&#xff0c;运动平台就像精密仪器的心脏&#xff0c;每一次跳动都关乎生产效率和产品质量。想象一下&#xff0c;光刻机要在指甲盖大小的芯片上绘制比头发丝还细的电路&#xff0c;这相当于让一台卡车在足球场上精准停到误…...

网页布局基石----盒子模型

目录 一&#xff1a;盒模型的构成 二&#xff1a;盒模型的核心属性 三&#xff1a;标准盒子模型代码实例 CSS控制网页样式是通过盒子模型去实现的&#xff0c;日常中我们所看到的网页上所以标签都可以视为一个盒子。所以网页都是放在盒子里面的。因此&#xff0c;我们首先要…...

AI00 RWKV Server:基于Vulkan的轻量级大模型本地推理部署指南

1. 项目概述&#xff1a;一个为RWKV模型打造的轻量级、高性能推理服务器 如果你正在寻找一个能让你在个人电脑上&#xff0c;甚至是集成显卡上&#xff0c;就能流畅运行大语言模型&#xff08;LLM&#xff09;的解决方案&#xff0c;那么AI00 RWKV Server绝对值得你花时间深入…...