import java.util.*; public class Solution { public ArrayList<ArrayList<Integer>> threeSum(int[] num) { //1. 初始化 ArrayList<ArrayList<Integer>> res = new ArrayList<>(); if(num == null || num.length < 3){ return res; } //2. 排序 Arrays.sort(num); //3. i用于确定第一个数 for(int i =0; i < num.length; i++){ //3.1 因为已经排过序,若第一个数就大于0,三数之和肯定大于0。 if(num[i] > 0){ break; } //3.2 对第一个数进行去重 if(i > 0 && num[i]==num[i-1]){ continue; } //3.3 双指针夹逼寻找另外两个数 int sum = -num[i]; int left = i + 1; int right = num.length - 1; while(left < right){ if(num[left] + num[right] == sum){ //1. 第一组结果 ArrayList<Integer> list = new ArrayList<>(); list.add(num[i]); list.add(num[left]); list.add(num[right]); res.add(list); //2. 寻找其他结果组,对left和right去重 while(left < right && num[left] == num[left+1]){ left++; } while(left < right && num[right] == num[right -1 ]){ right--; } left++; right--; }else if(num[left] + num[right] > sum){ right--; }else if(num[left] + num[right] < sum){ left++; } } } return res; } }