import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param num int整型一维数组 * @return int整型ArrayList<ArrayList<>> */ public ArrayList<ArrayList<Integer>> threeSum (int[] num) { // write code here // 解题思路: // 1.如果数组长度小于3,则直接返回。 // 2.对数组升序排序。 // 3.采用双指针,left/right // 如果left + right == target,则left++,right-- // 如果left+1 == left,则继续left++ // 如果right-1 == right,则继续right-- // 如果lef + right < target,则left++ // 如果left + right > target,则right-- if (num.length < 3) { return new ArrayList<>(); } Arrays.sort(num); ArrayList<ArrayList<Integer>> arrayList = new ArrayList<>(); for (int i = 0; i < num.length - 2; i++) { if (i > 0 && num[i] == num[i - 1]) { continue; } int left = i + 1; int right = num.length - 1; while (left < right) { if (num[left] + num[right] == -num[i]) { ArrayList<Integer> subList = new ArrayList<>(); subList.add(num[i]); subList.add(num[left]); subList.add(num[right]); arrayList.add(subList); while (num[left + 1] == num[left] && left + 1 < right) { left++; } while (num[right - 1] == num[right] && right - 1 > left) { right--; } left++; right--; } if (num[left] + num[right] < -num[i]) { left++; } if (num[left] + num[right] > -num[i]) { right--; } } } return arrayList; } }