题解
-
四数之和问题 转为 两个两数之和的求和问题
(1)将四个数组分为两组,每组两个数组。对于每组的两个数组,分别记录其求和的各种和值及相应的组合数。
(2)最后问题就转为,对这两个求和记录再次进行求和,记录使得求和结果为0的组合数。 -
优化
(1)只需记录一个组合的结果即可,另一个组合直接在遍历构建的过程中使用第一个组合的结果进行和零的判断
(2)第一个组合的键直接记录和值的相反数
(3)使用Map
代替Object
-
复杂度
(1)时间:O(n²) 未记数据存储到Map中的复杂度
(2)空间:O(n²) 最坏情况是所有和值都不相同 -
实现
/** * @param {number[]} A * @param {number[]} B * @param {number[]} C * @param {number[]} D * @return {number} */ var fourSumCount = function