三个数之和(Java)

题目描述

给定一个包含n个整数的数组,在数组中是否存在a、b、c元素使得a + b + c = 0?找出数组中所有唯一的三个数组合,它们的和为零。

解决

代码:

public List> threeSum(int[] nums) {
      	Arrays.sort(nums);
        List> 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]));
                    while (left < right && nums[left] == nums[left+1]) left++;
                    while (left < right && nums[right] == nums[right-1]) right--;
                    left++;
                    right--;
                }else if(count < sum){
                    left ++;
                }else {
                    right --;
                }
            }
        }
        return list;
    }

你可能感兴趣的:(数组题)