Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note:
- Elements in a triplet (a,b,c) must be in non-descending order. (ie, a ≤ b ≤ c)
- The solution set must not contain duplicate triplets.
For example, given array S = {-1 0 1 2 -1 -4},
A solution set is:
(-1, 0, 1)
public class Solution {
public List<List<Integer>> threeSum(int[] num) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(num==null || num.length<3) return res;
Arrays.sort(num);// sort first
int a,b,c;
int target=0;
// O(n^2)
for(int i=0;i<num.length-1;i++){
a=i;b=a+1;c=num.length-1;
while(b<c){
if(num[a]+num[b]+num[c]==target){
List<Integer> arr=new ArrayList<Integer>();
arr.add(num[a]);
arr.add(num[b]);
arr.add(num[c]);
res.add(arr);
b++;
c--;
}
else if(num[a]+num[b]+num[c]>target){
c--;
}
else{
b++;
}
}
}
HashSet set=new HashSet(res);
res.clear();
res.addAll(set);
return res;
}
}思路:先对数组排序,然后左右夹逼。
探讨了如何在整数数组中寻找所有唯一且不重复的三元组,使这三个数相加等于零。该解决方案首先对数组进行排序,接着采用两指针法遍历数组以减少时间复杂度。

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



