题目描述
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?
请你找出所有和为 0 且不重复的三元组。
双指针法求解
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new ArrayList<>(); //新建一个列表存储返回结果
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;
int R = nums.length - 1;
while(L < R){
if(nums[L] + nums[R] == -nums[i]){ //三数相加为0
List<Integer> list = new ArrayList<>();
list.add(nums[i]);
list.add(nums[L++]);
list.add(nums[R--]);
result.add(list);
while(L > R && nums[L] == nums [L-1]){ //去重
L--;
}
while(R > L && nums[R] ==nums [R+1]){ //去重
R--;
}
}
else if(nums[L] + nums[R] > -nums[i]){
R--;
}else{
L++;
}
}
}
return result;
}
}
3451

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



