- 三数之和
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
先排序,确定号大小顺序
利用hashset去重
循环遍历数组,以当前元素i为基准
利用双指针确定另外两个元素,l、r
利用夹逼算法进行while循环,找到满足i+l+r的元素(同时维护左右指针向中间靠拢)
同时判断是否<0(将左指针向前移动)、>0(将右指针向后移动)
最后新建一个List,addAll将set添加进去
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
int n=nums.length;
Set<List<Integer>> set=new HashSet<>();
for(int i=0;i<n;i++){
int l=i+1;
int r=n-1;
while(l<r){
if(nums[i]+nums[r]+nums[l]==0){
set.add(Arrays.asList(nums[i],nums[l],nums[r]));
l++;
r--;
}else if(nums[i]+nums[r]+nums[l]<0){
l++;
}else{
r--;
}
}
}
List<List<Integer>> list=new ArrayList<>();
list.addAll(set);
return list;
}
}