三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
如果您有别的方法,可以在下面分享谢谢。
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res = new ArrayList<List<Integer>>();
int i = 0;
int j = 0;
int k = 0;
while(i < nums.length ){
if(( i == 0 || nums[i]!=nums[i-1]) && (nums[i] <= 0)){
j = i + 1;
k = nums.length - 1;
while( j < k){
if( nums[i]==0 &&nums[j]==0 && nums[k]==0){
List<Integer> tmp = new ArrayList<Integer>();
tmp.add(0);
tmp.add(0);
tmp.add(0);
res.add(tmp);
break;
}
int s = nums[i] + nums[j] + nums[k];
if(s == 0){
List<Integer> tmp = new ArrayList<Integer>();
tmp.add(nums[i]);
tmp.add(nums[j]);
tmp.add(nums[k]);
res.add(tmp);
j += 1;
while( (nums[j] == nums[j-1]) && ((j+1) < (nums.length-1))){
j += 1;
}
k -= 1;
while(nums[k] == nums[k+1]){
k -= 1;
}
}else if(s > 0){
k -= 1;
while( nums[k] == nums[k + 1]){
k -= 1;
}
}else{
j += 1;
while(nums[j] ==nums[j-1] && (j+1 < nums.length-1)){
j +=1;
}
}
}
}
i += 1;
}
return res;
}```