1、數組排序
2、左邊固定一個指針,遍歷
3、右邊兩個移動指針
4、三個指針指向的值求和判斷
5、a配對的b/c可能有多個,所以需要將b/c的指針均移動到下一個和b/c不同的值處
TC = O(n^2)
class Solution {
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
if(nums==null || nums.length==0)
return res;
Arrays.sort(nums);
int a,b,c;
int n = nums.length;
for(int i=0; i<n; i++){
if(i-1>=0 && nums[i]==nums[i-1])
continue;
a = nums[i];
int s=i+1,e=n-1;
while(s<e){
b=nums[s];
c=nums[e];
if(a+b+c==0){//a配對的b/c可能有多個,所以需要將b/c的指針均移動到下一個和b/c不同的值
res.add(Arrays.asList(a,b,c));
while(s<e && nums[s]==nums[s+1]) s++;
while(s<e && nums[e]==nums[e-1]) e--;
s++;
e--;
}else if(a+b+c<0){
s++;
}else{
e--;
}
}
}
return res;
}
}