题目要求:
给出一个给定的数组,找出所有三个数之和等于0的集合,并返回所有的结果集
解题思路:
解题之前先对数组进行排序
1. 确定了一个nums[i]之后通过高位high以及低位low左右close
2.注意要判断nums[i]是否等于nums[i+1]如果等于直接跳过
3.如果高位和低位相加大于sum值则high下移
4.如果高位和低位相加小于sum值则low上调
5.相等则将nums[i],nums[low],nums[high]加入结果集
代码如下:
public static List<List<Integer>> threeSum(int[] nums){
Arrays.sort(nums); List<List<Integer>> result = new ArrayList<List<Integer>>(); for (int i =0; i <nums.length-2;i++){ int low = i+1, high = nums.length-1, sum = 0- nums[i]; while(low< high){ if(i==0||nums[i]!=nums[i-1]){ if(nums[low]+nums[high]==sum){ result.add(Arrays.asList( nums[i],nums[low],nums[high]) ); while(low<high&&nums[low]==nums[low+1]) low++; while(low<high&&nums[high]==nums[high-1]) high--; low++; high--; }else if(nums[low]+nums[high]<sum){ low++; }else{ high--; } } } } return result; }