javascript - 数组中的所有对总和为 10,具有平均/最佳 O(n) 运行时复杂度

标签 javascript algorithm hashmap

我正在尝试使用 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/

相关文章:

algorithm - 从两个 3D 多集数组中找到任意两个相应多集的交集大小的更快方法

java - 对象引用的哈希码和等于?

java - 哪个 Java 集合适合在巨大的数组列表中查找具有最大时间戳的文件名?

javascript - 如果我需要在 React 组件之后设置 State,如何对服务器的失败响应使用react?

javascript - 如果元素存在则返回一个函数

c# - 如何从图像绘制 map ?

java - 使用 HashMap 的字数统计程序

javascript - 卡住了 Owl Carousel - 无法使其工作

javascript - 通过 HTML 和 CSS 和/或 Javascript 编号的列表

algorithm - 如何将此顺序迭代二进制搜索转换为并行算法?