4Sum

Problem Description

Given an array nums of n integers, return an array of all the unique quadruplets [nums[a], nums[b], nums[c], nums[d]] such that:

You may return the answer in any order.

 

Example 1:

Input: nums = [1,0,-1,0,-2,2], target = 0
Output: [[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

Example 2:

Input: nums = [2,2,2,2,2], target = 8
Output: [[2,2,2,2]]

 

Constraints:

Solution (JavaScript)

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[][]}
 */
var fourSum = function(nums, target) {
    var rtn = [];
    if (nums.length < 4) {
        return rtn;
    }
    
    nums = nums.sort(function(a, b) {
        return a - b;
    });
    const res = new Set();
    
    for (var m = 0; m < nums.length - 3; m++) {
        for (var i = m + 1; i < nums.length - 2; i++) {
            for (var j = i + 1, k = nums.length - 1; j < k;) {
                if (nums[m] + nums[i] + nums[j] + nums[k] === target) {
                    const abcd = [nums[m], nums[i], nums[j], nums[k]];
                    res.add(abcd.sort().join(','));
                    j++;
                    k--;
                } else if (nums[m] + nums[i] + nums[j] + nums[k] > target) {
                    k--;
                } else {
                    j++;
                }
            }
        }
    }
    
    rtn = [...res].map(abcd => abcd.split(',').map(e => parseInt(e)));
    return rtn;
};