LeetCode:三数之和

该博客介绍了LeetCode中三数之和的问题,通过将问题转化为两数之和,利用有序数组的特性,采用双指针法降低时间复杂度到O(n^2)。博客详细解释了如何避免重复三元组,包括左指针每次都移动到目标数的下一位以及跳过与上一次枚举数相同的元素。提供了具体的代码示例,以数组[-1, 0, 1, 2, -1, -4]为例,展示了如何找到满足条件的不重复三元组。" 114497247,7515079,ndnSIM scenario模板编译错误:找不到'ns3-core',"['ndnSIM', 'ndn', 'ubuntu', 'linux', 'python']
摘要由CSDN通过智能技术生成

1.三数之和

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

解题思路:

a + b + c = 0 => a + b = -c; 那么此问题转换成 两数之和问题!

对C我们可以在数组中一 一枚举。在数组的其他部分中找到符合条件的a,b组。

在无序数组中,由于无法确定a、b位置,所以a和b只能遍历一 一枚举,直至满足条件。这种做法,嵌套三重循环。时间复杂度为O(n^3).属于暴力解法。

对有序数组,特点是递增排列,可以采用双指针法a 从最左端开始寻找,b从最右端开始寻找:

  1. a + b < -c , 减小 a + b的值。只能减小b,故b向左移动一位。
  2. a + b > -c,增大a + b的值,只能增大a,故a向右移动一位。
  3. a + b = -c, 寻找到目标数。

例如:nums = [-1, 0, 1, 2, -1, -4]。

1. c = -4

在这里插入图片描述
不存在 a + b -4 = 0.

2.c =-1

在这里插入图片描述
a = -1,b = 2 ,c = -1.

在这里插入图片描述
a = 0,b=1,c=-1

这样就找到了两组[[-1,2,-1],[0,1,-1]].

但这里还存在问题,如何满足 【不重复的三元组】?

1. 为什么,左指针每次为目标数的下一位。为了避免重复。

例如,对于上述数组。
当目标数为 C = -1 时。

在这里插入图片描述
当目标数C = -1(第二个)时.
在这里插入图片描述
两个得到结果相同

2. 上一次枚举数不能和本次枚举数相同。

如果本次枚举数与上一次相同,跳过本次查找。
例如[0,0,0,0]
!在这里插入图片描述
问题一:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值