【发布时间】:2019-08-18 19:45:44
【问题描述】:
假设我有经典的二和问题,但有一个转折
如果给我一个整数列表和目标
我需要打印所有加起来为总和的值对
不重复对称值
不重用值
出于显而易见的原因,我试图避免使用蛮力方法,但如果我实现一个哈希映射,其中每个值作为键,元素是原始数组中该值的频率。如何让算法只打印每个值对一次?
function findPairs(arr, target){
let hashMap = {};
let results = [];
for(let i = 0; i < arr.length; i++){
if(hashMap.hasOwnProperty(arr[i])){
hashMap[arr[i]]++;
}else{
hashMap[arr[i]] = 1;
}
}
for(let i = 0; i < arr.length; i++){
let diff = target - arr[i];
if(hashMap.hasOwnProperty(diff) && hashMap[diff] > 0){
results.push([arr[i], diff]);
hashMap[diff]--;
}
}
console.log(results);
}
findPairs([1, 3, -1, 11, 7], 10);
findPairs([5, 5, 5, 5, 5], 10);
findPairs([1, 3, -1, 11, 7], 10)
(3, 7) (-1, 11)
findPairs([5, 5, 5], 10)
(5, 5)
findPairs([5, 5, 5, 5], 10)
(5, 5) (5, 5)
findPairs([5, 5, 5, 5, 5], 10)
(5, 5) (5, 5)
findPairs([5, 5, 5, 5, 5, 5 ], 10)
(5, 5) (5, 5) (5, 5)
【问题讨论】:
标签: algorithm hashmap big-o hashtable