三数之和,可以使用以下思路,先确定一个数,然后集变成了两数之和的一个题目,可以先排序,然后使用双指针法进行搜索。
注意去重。
public List<List<Integer>> threeSum(int[] nums) {
List<List<Integer>> result = new LinkedList();
int n = nums.length;
Arrays.sort(nums);
for(int i = 0 ; i < n ; i++)
{
if(nums[i] > 0)
break;
if(i > 0 && nums[i] == nums[i - 1])
continue;
int s = i + 1;
int e = n - 1;
int target = 0 - nums[i];
while (s < e)
{
if(nums[s] + nums[e] < target)
{
s++;
}
else if(nums[s] + nums[e] > target)
{
e--;
}
else
{ List<Integer> temp = new LinkedList<Integer>();
temp.add(nums[i]);
temp.add(nums[s]);
temp.add(nums[e]);
result.add(temp);
while (s < e && nums[s] == nums[s + 1])
s++;
while (s < e && nums[e] == nums[e - 1])
e--;
s++;
e--;
}
}
}
return result;
}