题目链接
public class Solution {
public List<List<Integer>> result = new LinkedList<List<Integer>>();
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
int last=Integer.MAX_VALUE;
for(int i=0;i<nums.length&&nums[i]<=0;i++)
{
if(last==nums[i])
{
continue;
}
last=nums[i];
fun(nums,0-nums[i],i+1,nums.length-1);
}
return result;
}
public void fun(int[] nums,int target,int start,int end)
{
int lastStart=Integer.MAX_VALUE;
int lastEnd=Integer.MAX_VALUE;
while(start<end)
{
lastStart=nums[start];
lastEnd=nums[end];
if(nums[start]+nums[end]==target)
{
LinkedList<Integer> temp=new LinkedList<Integer>();
temp.add(0-target);
temp.add(nums[start]);
temp.add(nums[end]);
result.add(temp);
while(start<end&&nums[start]==nums[start+1])
{
start++;
}
while(start<end&&nums[end-1]==nums[end])
{
end--;
}
start++;
end--;
}
else if(nums[start]+nums[end]<target)
{
start++;
}
else
{
end--;
}
}
}
}