public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
if (nums==null||nums.length<3) return ans;
Arrays.sort(nums);//预处理
for (int i = 0; i < nums.length-2; i++) {
if (nums[i]>0) break;
if (i>0&&nums[i]==nums[i-1]) continue;//去除第一个数的重复解
int l=i+1,r=nums.length-1;
while (l<r){
int sum = nums[i]+nums[l]+nums[r];
if (sum==0){
ans.add(Arrays.asList(nums[i],nums[l],nums[r]));
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 r--;//sum>0
}
}
return ans;
}
LeetCode15三数之和(预排序加双指针)
最新推荐文章于 2021-10-10 11:02:49 发布