21.03.09 LeetCode15. 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:
输入:nums = []
输出:[]
示例 3:
输入:nums = [0]
输出:[]
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
//先排序,再从0开始对
List<List<Integer>> ans = new ArrayList<List<Integer>>();
int len = nums.length;
if(nums==null || len<3)
return ans;
Arrays.sort(nums);
//这里的终止条件,可以写len也可以写len-2,写len-2会更加减少执行用时
//因为少了两次循环,在所有测试用例加起来就少了很多次
for(int i = 0;i<len-2;i++)
{
if(nums[i]>0)
break;
if(i>0 && nums[i] == nums[i-1])
continue;
int L = i+1;
int R = len-1;
while(L<R)
{
int sum = nums[i]+nums[L]+nums[R];
if(sum==0)
{
List<Integer> t = new ArrayList<>();
t.add(nums[i]);t.add(nums[L]);t.add(nums[R]);
ans.add(t);
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;
}
}

浙公网安备 33010602011771号