标签:div 3sum new col 就是 style .so 重复 public
对数组的每一个数进行遍历,从这个数之后的数字中找出两个的sum等于这个数的相反数。找出这两个数的方法是从剩下list的两端开始查找,要是两端也就是lo+hi < sum的话lo就往前进一位。这中间也要注意的时,因为不能有重复,因此在找到一组相等的之后要判断lo跟lo+1是否一样,一样的话就要lo++,对hi也是同理。
1 class Solution { 2 public List<List<Integer>> threeSum(int[] nums) { 3 List<List<Integer>> res = new ArrayList<> (); 4 Arrays.sort(nums); 5 for(int i = 0; i < nums.length - 2; i++) { 6 if(i == 0 || (i > 0 && nums[i] != nums[i-1])) { 7 int lo = i + 1, hi = nums.length - 1, sum = 0 - nums[i]; 8 while(lo < hi) { //要记得循环 9 if(nums[lo] + nums[hi] == sum) { 10 res.add(Arrays.asList(nums[i], nums[lo], nums[hi])); 11 while(lo < hi && nums[lo] == nums[lo + 1]) lo++; // lo < hi要放在第一个,因为例如[0, 0, 0]时 12 while(lo < hi && nums[hi] == nums[hi - 1]) hi--; //最后一个会out of index bound,先判断lo < hi就没关系 13 lo++; 14 hi--; 15 }else if(nums[lo] + nums[hi] < sum) { 16 lo++; 17 }else { 18 hi--; 19 } 20 } 21 } 22 } 23 return res; 24 } 25 }
标签:div 3sum new col 就是 style .so 重复 public
原文地址:https://www.cnblogs.com/goPanama/p/9393765.html