Leetcode解题笔记-3sum

题目要求:

给出一个给定的数组,找出所有三个数之和等于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;

}

posted @ 2015-08-10 11:28  haochen_Mark  阅读(121)  评论(0编辑  收藏  举报