题目来源
本题需要从nums数组中找出所有和为0的三元组,且找出的三元组不能重复。
本题可以分解为两部分逻辑:
- 找到和为0的三元组
- 三元组去重
找和为0的三元组,最简单的方法就是三重for暴力枚举,时间复杂度O(n^3),n = nums.length(),结合备注的nums长度,可以得出暴力法会超时。
因此,我们需要一种更优的算法。
当前最优算法思路为:
首先,将nums数组进行升序,
然后,利用三个指针 i, l, r 来选择三个数,如果i, l,r指针指向的三数之和为0,则找到一个符合要求的三元组。
三指针指向的元素值的大小关系:nums[i] <= nums[l] <= nums[r]
上面三指针的运动逻辑其实可以概括,
首先确定三元组的最小值nums[i],然后找到一个与之匹配的nums[l],nums[r]
这样的话,就将三指针运动 转为了 双指针运动。
我们通过下面 示例1 图示来理解运动过程:
nums = [-1,0,1,2,-1,-4] 经过升序后,变为nums = [-4,
已下架不支持订阅

被折叠的 条评论
为什么被折叠?



