我正在尝试使用 javascript 进行编码。
我正在使用 map 并试图找到所有加起来等于 10 的对。但是,这些对没有正确打印。有些双鞋正在打印,有些双鞋没有。
<script>
function twoSum(nums, target_num) {
if(nums.length<2){
return;
}
var myMap = new Map();
var i;
var target, val;
for(val of nums){
//New change added for the recommendation of a user below
//This makes the answer a little better
myMap.set(val,false);
target = target_num - val;
if(!myMap.has(target)){
myMap.set(val,target);
}
else{
console.log("[" + target + "," + val +"]");
}
}
}
</script>
我的输入是 ([2,4,6,7,3,2,1,9,4,1,6,4],10) 我想要的输出是 [4,6]、[4,6]、[6,4]、[6,4]、[7,3]、[1,9]、[9,1]、[4,6 ],[6,4] 所以基本上,所有的数字都是我应该考虑的指标。 但是,我得到的输出是:[4,6]、[7,3]、[1,9]、[6,4]、[9,1]、[4,6]、[6,4 ].
我不确定我到底做错了什么。如果您能告诉我哪里出了问题以及我该如何纠正自己,那将非常有帮助。 另外,我的目标是让运行时间为 O(n),您认为我的解决方案实现了吗?
非常感谢您的帮助。
谢谢。
最佳答案
试试这个:
function twoSum(nums, target_num) {
if(nums.length<2){
return;
}
var myMap = new Object();
var target;
for (var i=0; i<nums.length; i++){
if (myMap[nums[i]]){
myMap[nums[i]].push(i);
} else {
myMap[nums[i]] = [i];
}
}
for(var i=0; i<nums.length; i++){
target = target_num - nums[i];
if (myMap[target]){
var indexes = myMap[target].filter(j => j > i);
if (indexes.length > 0){
console.log(
myMap[target].filter(j => j > i)
.map(x => [nums[i],target])
);
}
}
}
}
console.log(twoSum([2,4,6,7,3,2,1,9,4,1,6,4],10))
关于javascript - 数组中的所有对总和为 10,具有平均/最佳 O(n) 运行时复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711644/