三数之和 Java
class Solution {public static List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> list = new ArrayList();int n = nums.length;Arrays.sort(nums);for (int i = 0; i < n - 2; i++) { // 第一个数索引if (nums[i] > 0) break; // 第一个数都大于0了,那么就不可能与后面两个数的和为0if (i > 0 && nums[i] == nums[i - 1]) continue; // 第一个数去重int l = i + 1; // 第二个数索引(左指针)int r = n - 1; // 第三个数索引(右指针)while (l < r) {int sum = nums[i] + nums[l] + nums[r];if (sum == 0) {list.add(Arrays.asList(nums[i], nums[l], nums[r])); // 加入结果集while (l < r && nums[l] == nums[l + 1]) l++; // 第二个数去重while (l < r && nums[r] == nums[r - 1]) r--; // 第三个数去重// 别忘了移动指针l++; r--;} else if (sum > 0) {r--; // 和大于0,则左移右指针使和变小} else {l++; // 和小于0,则右移左指针使和变大}}}return list;}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~