代码随想录算法训练营第7天 【哈希表】| 454. 四数相加 II

60 阅读1分钟

454. 四数相加 II

哈希表 map

1.分治法

  1. count += map.get(0 - sum) || 0;

3.注意|| 0,否则输出NaN

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @param {number[]} nums3
 * @param {number[]} nums4
 * @return {number}
 */
var fourSumCount = function(nums1, nums2, nums3, nums4) {
    let map = new Map();
    let count = 0;

    // 遍历前两个数组 时间复杂度 n^2
    for (const n1 of nums1) {
        for (const n2 of nums2) {
            // 卡住
            let sum = n1 + n2;
            map.set(sum, (map.get(sum) || 0) + 1)
        }
    }

    // 剩下两个数组找 n3 + n4
    for (const n3 of nums3) {
        for (const n4 of nums4) {
            let sum = n3 + n4;
            // 出现频次, 不是 count += 1
            count += map.get(0 - sum) || 0;
        }
    }

    return count;

};