题目描述
给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
解题思路
双指针
注意这个题也是双指针,不过是两个指针一个从前面开始,一个从后面开始遍历
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
Arrays.sort(nums);
int len = nums.length;
for(int i=0;i<len;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){
res.add(Arrays.asList(nums[i],nums[L],nums[R]));
while(L<R&&nums[L+1]==nums[L]) L++;
while(L<R&&nums[R-1]==nums[R]) R--;
R--;
L++;
}else if(sum>0){
R--;
}else{
L++;
}
}
}
return res;
}