给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = target ?找出所有满足条件且不重复的三元组。
List<List<Integer>> threeSum(int [] nums, int target)
{
List<List<Integer>> result = new ArrayList<>();
int len = nums.length;
Arrays.sort(nums);
for(int i = 0; i < len - 2; i++)
{
if(nums[i] + nums[i + 1] + nums[i + 2] > target)
break;
if(nums[i] + nums[len - 2] + nums[len - 1] < target)
continue;
if(i > 0 && nums[i] == nums[i - 1])
continue;
int left = i + 1;
int right = len - 1;
while(left < right)
{
int diff = target - nums[i] - nums[left] - nums[right];
if(diff == 0)
{
result.add(new ArrayList<Integer>(Arrays.asList(nums[i], nums[left], nums[right])));
while(left < right && nums[left] == nums[left + 1])
left++;
while(left < right && nums[right] == nums[right - 1])
right--;
left++;
right--;
}
else if(diff > 0)
left++;
else
right--;
}
}
return result;
}