Leetcode 15.三数之和

这篇博客详细介绍了LeetCode中第15题——三数之和的问题。博主分析了如何在给定整数数组中找到和为0的不重复三元组,并提供了思路和解决方案。通过排序、限制搜索范围以及巧妙的去重方法来避免重复答案。文章还包含了实际的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Time: 20190920
Type: Medium

题目描述

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

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

例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4]

满足要求的三元组集合为:

[
  [-1, 0, 1],
  [-1, -1, 2]
]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

首先从大的方面来看,排序之后比较容易做到去重,相同元素直接选取代表即可。

拍完序之后,以下标i从左往右遍历作为主循环,找到剩下两个加起来和为-nums[i]的两个元素。

这样的两个元素一定出现在nums[i]后面,这个限制非常关键。因为主循环是从左往右遍历,如果不限制只在当前元素后面找,则会重复答案。

加上这个限制,如果当前元素大于0,则表示后面的所有元素都大于0,三个数相加之和不可能为0.

这里有两次去重的概念,首先是在外层,如果nums[i]和上一个元素nums[i-1]相同,则直接跳过,因为相同值已经考虑过了。

另一个是在三数之和为0时,还要其他的解,这里也考虑一次去重即可。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值