题目描述:
输入输出Demo:
解析:在LeetCode上本题属于Medium难度。TwoSum的升级版,不是很难,采用双指针,先排序,首先定一个数,其余的数就用两个指针逼近。
class Solution {public List<List<Integer>> threeSum(int[] nums) {Arrays.sort(nums);List<List<Integer>> res = new ArrayList<>();for (int i = 0; i < nums.length - 2; i++) {int l = i + 1, r = nums.length - 1;if (i > 0 && nums[i] == nums[i - 1]) { //防止固定到相同的数,即,遇到相同的数就跳过continue;}while (l < r) {if (nums[i] + nums[l] + nums[r] > 0) { //表明r的数大了r--;} else if (nums[i] + nums[l] + nums[r] < 0) { //表明l的数小了l++;} else {//满足条件List<Integer> currRes = new ArrayList<>();currRes.add(nums[i]);currRes.add(nums[l]);currRes.add(nums[r]);res.add(currRes);//去重while (l < r && nums[l] == nums[l + 1]) { //双指针逼近过程中也要去重l++;}while (l < r && nums[r] == nums[r - 1]) {r--;}l++;r--;}}}return res;}}
