第18题:4Sum

来源:互联网 发布:淘宝美式画 编辑:程序博客网 时间:2024/05/16 17:22

Given an array S of n integers, are there elementsa, b, c, and d in S such that a +b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.

Note: The solution set must not contain duplicate quadruplets.

For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.A solution set is:[  [-1,  0, 0, 1],  [-2, -1, 1, 2],  [-2,  0, 0, 2]]


题目要求:从已知数组中找出4数之和为目标值的四个数,输出所有结果。(数组中可能包含重复元素


编程语言:javascript

解法:算法复杂度为O(n^3)  思路:思路同3Sum差不多,在3Sum的基础上再外加一层for循环。


/** * @param {number[]} nums * @param {number} target * @return {number[][]} */var fourSum = function(nums, target) {    var length = nums.length;    if(length<4)    {        return [];    }    if(length == 4)    {        if(nums[0]+nums[1]+nums[2]+nums[3] === target)        {            return [[nums[0],nums[1],nums[2],nums[3]]];        }    }    var resultArray = [];        nums.sort(function(x,y)    {        return x-y;    });        for(var i=0; i<length-3; ++i)    {        if(i>0 && nums[i] == nums[i-1])         {            continue;        }        //求三数和        for(var j=i+1; j<length-2; ++j)        {            if(j>i+1 && nums[j] == nums[j-1])             {                continue;            }            var left = j+1;            var right = length-1;            while(left<right)            {                var sum = nums[i] + nums[j] + nums[left] + nums[right];                                if(sum > target)                {                    --right;                }else if(sum < target)                {                    ++left;                }else{                                                                                resultArray.push([nums[i],nums[j],nums[left],nums[right]]);                                        while(left<right && nums[left] == nums[left+1])                    {                        ++left;                    }                    while(left<right && nums[right] == nums[right-1])                    {                        --right;                    }                    ++left;                    --right;                }                            }        }    }    return resultArray;};


0 0
原创粉丝点击