假设我有经典的两个求和问题,但有点扭曲
如果给我一个整数和目标的列表
我需要打印与和相加的所有值对。
不重复对称值
而不重用值
出于明显的原因,我试图避免使用蛮力方法,但是如果我实现一个散列映射,每个值作为关键,元素是原始数组中该值的频率。如何使算法只打印每个值对一次?
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,10)
(5,5) (5,5)
发布于 2019-03-28 08:57:17
就我所知,这是问题的摘要:
此代码基于您在问题中提供的示例。
https://stackoverflow.com/questions/55390811
复制相似问题