Toc
  1. Q:
    1. 注意:
  • 示例:
  • A:
  • Toc
    0 results found
    bbcfive
    四数之和
    2019/07/13 Algorithm Array Hash

    Q:

    给定一个包含 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]
    ]

    A:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    /**
    * @param {number[]} nums
    * @param {number} target
    * @return {number[][]}
    */
    var fourSum = function(nums, target) {
    nums.sort(function(a, b) {
    return a - b;
    });

    var hash = [];

    var len = nums.length;

    for (var i = 0; i < len; i++)
    for (var j = i + 1; j < len; j++) {
    var a = nums[i]
    , b = nums[j]
    , c = a + b;

    if (hash[c] === undefined)
    hash[c] = [[i, j]];
    else
    hash[c].push([i, j]);
    }

    var ans = [];

    var hashSet = {};

    for (var i = 0; i < len; i++)
    for (var j = i + 1; j < len; j++) {
    var a = nums[i]
    , b = nums[j]
    , sum = target - a - b;

    if (!hash[sum])
    continue;

    for (var k = 0, _len = hash[sum].length; k < _len; k++) {
    var item = hash[sum][k];

    if (item[0] === i || item[1] === i || item[0] === j || item[1] === j)
    continue;

    var c = nums[item[0]]
    , d = nums[item[1]];

    var tmp = [a, b, c, d].sort(function(a, b) {
    return a - b;
    });

    var str = tmp.join(',');
    if (!hashSet[str]) {
    hashSet[str] = true;
    ans.push(tmp);
    }
    }
    }

    return ans;
    };

    小结:恶心他妈给恶心开门恶心到家了。。

    本文作者:bbcfive
    版权声明:本文首发于bbcfive的博客,转载请注明出处!