四数之和

题目描述:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。

示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[  [-1,  0, 0, 1], [-2, -1, 1, 2], [-2,  0, 0, 2] ]

java代码

class Solution {

    public List> fourSum(int[] nums, int target) {

        List> res = new LinkedList<>();

        Arrays.sort(nums);

        int n = nums.length;

        for(int i=0;i

            if(i>0 && nums[i] == nums[i-1]) continue;

            if(nums[i]+nums[i+1]+nums[i+2]+nums[i+3]>target) break;

            if(nums[i]+nums[n-1]+nums[n-2]+nums[n-3]

            for(int j=i+1;j

                if(j-i>1 && nums[j]==nums[j-1]) continue;

                if(nums[i]+nums[j]+nums[j+1]+nums[j+2]>target) break;

                if(nums[i]+nums[j]+nums[n-1]+nums[n-2]

                int left = j + 1;

                int right = n - 1;

                while(left < right) {

                    int tmp = nums[i] + nums[j] + nums[left] + nums[right];

                    if(tmp == target) {

                        List tmpList = new LinkedList<>(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));

                        res.add(tmpList);

                        while(left < right && nums[left] == nums[left+1]) left += 1;

                        while(left < right && nums[right] == nums[right-1]) right -= 1;

                        left += 1;

                        right -= 1;

                    }else if(tmp > target) right -= 1;

                    else left += 1;

                }

            }

        }

        return res;

    }

}

你可能感兴趣的:(四数之和)