15_三数之和
难度:中等
题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例
示例一:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例二:
输入:nums = []
输出:[]
示例三:
输入:nums = [0]
输出:[]
提示
0 <= nums.length <= 3000-10^5 <= nums[i] <= 10^5
解题
题目最关键的就是如何去除重复的三元组,可以通过排序的方法解决这个问题,将数组排序后,如果遇到重复的元素,跳过即可。
首先对数组进行排序
1
2
3int len = nums.length;
if (nums==null|| len<3) return ans;
Arrays.sort(nums); // 排序固定一个数
nums[i], 定义左右指针分别指向nums[i]之后的两端,分别为nums[L]和nums[R], 判断和是否为 0int L = i + 1; int R = len - 1;如果
nums[i]大于 0 ,说明它和它后面的元素全部大于 0,肯定不符合条件,结束循环如果
nums[i] = nums[i-1],说明该数字重复,应该跳过当和为 0 时,如果
nums[L] = nums[L++], 说明该数字重复,应该 L++当和为 0 时,如果
nums[R] = nums[R--], 说明该数字重复,应该R–
1 | |