3Sum

public class Solution {
    /**
     * @param numbers: Give an array numbers of n integer
     * @return: Find all unique triplets in the array which gives the sum of zero.
     */
    public List<List<Integer>> threeSum(int[] numbers) {
        // write your code here
        List<List<Integer>> result = new ArrayList<>();
        if(numbers == null || numbers.length < 3){
            return result;
        }
        Arrays.sort(numbers);
        
        for(int i = 2; i < numbers.length; i++){
            if(i + 1 < numbers.length && numbers[i + 1] == numbers[i]){
                continue;
            }
            int tgt = -1 * numbers[i];
            twoSum(numbers, tgt, i, result);
        }
        return result;
    }
    public void twoSum(int[] nums, int target, int r, List<List<Integer>> result) {
        // write your code here
        int left = 0;
        int right = r - 1;
        while(left < right){
            if(nums[left] + nums[right] == target){
                List<Integer> temp = new ArrayList<>();
                temp.add(-1*target);
                temp.add(nums[left]);
                temp.add(nums[right]);
                Collections.sort(temp);
                result.add(temp);
                left++;
                right--;
                while(left < right && nums[left] == nums[left-1]){
                    left++;
                }
                while(left < right && nums[right] == nums[right+1]){
                    right--;
                }
            }else if(nums[left] + nums[right] < target){
                left++;
            }else{
                right--;
            }
        }
    }
}

最后更新于

这有帮助吗?