给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
如果使用暴力法会超时。这里使用双指针法。
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> res=new ArrayList<>();
if(nums==null||nums.length<3)
return res;
for(int i=0;i<nums.length-2;i++){
System.out.println("aa");
if(nums[i]>0)
break;
if(i>0&&nums[i]==nums[i-1])
continue;
int l=i+1;
int r=nums.length-1;
while(r>l){
if(nums[i]+nums[l]+nums[r]==0){
List<Integer> lists=new ArrayList<>();
lists.add(nums[i]);
lists.add(nums[l]);
lists.add(nums[r]);
res.add(lists);
while(l<r&&nums[l]==nums[l+1]) l++;
while(l<r&&nums[r]==nums[r-1]) r--;
l++;
r--;
}
else if(nums[i]+nums[l]+nums[r]>0) r--;
else {
l++;
}
}
}
return res;
}