题目描述
给定一个包含n个整数的数组,在数组中是否存在a、b、c元素使得a + b + c = 0?找出数组中所有唯一的三个数组合,它们的和为零。
解决
代码:
public List<List<Integer>> threeSum(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> list = new ArrayList<>();
for (int i = 0;i < nums.length - 2;i ++){
//当第i个数开始大于零时,跳出循环
if(nums[i] > 0)
break;
//当相邻数相等时,跳过该数,避免重复结果
if(i > 0 && nums[i] == nums[i-1])
continue;
//使用两个指针,向中间夹
int left = i+1,right = nums.length-1,sum = -nums[i];
while(left < right){
int count = nums[left] + nums[right];
if(count == sum){
list.add(Arrays.asList(nums[i],nums[left],nums[right]));