javascript - Sum of Pairs : Codewars 优化解

标签 javascript arrays algorithm memoization

我需要帮助优化问题的解决方案,我已经解决了问题,但我的代码不足以处理大型数组 - codeWars : Sum of Pairs - problem

这是我的代码-

var sum_pairs=function(e, sum){

var result=null;
var arrLen=e.length;
for(let i=0;i<arrLen-1;i++){
  let nextIndex=e.slice(i+1,arrLen).indexOf(sum-e[i]);
  if(nextIndex>=0){ 
    result=[e[i],e[nextIndex+1+i]];
    arrLen=nextIndex+1+i; 
  }
}
return result;
}

好吧,我知道这不是一个好的解决方案。无论如何,这通过了所有测试用例,但在遇到大数组时失败了 - Result On codewars

我想知道如何优化这段代码,也想学习任何编写好的代码的技巧。

最佳答案

一种解决方案是使用Set 数据结构来记住所有准备好迭代的数字。然后我们可以检查每个元素是否有一个总和为 s 的数字。该集合具有用于插入和搜索的平均恒定时间复杂度,使得算法在时间(和空间)上呈线性。

var sum_pairs=function(ints, s){
  if (ints.length < 2) return undefined; //not enough numbers for pair.
  let intSet = new Set()
  intSet.add(ints[0]);
  for (let i=1; i < ints.length; ++i){
    let needed = s-ints[i];
    if (intSet.has(needed)){//check if we have already seen the number needed to complete the pair.
      return [needed,ints[i]];
    }
    intSet.add(ints[i]);//if not insert the number in set and continue.
  }
  return undefined;//No answer found
}

关于javascript - Sum of Pairs : Codewars 优化解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42270462/

相关文章:

javascript - 在本地主机上运行时不执行 JSONP 回调

javascript - 如果 JavaScript 是多线程的,它会表现得更好吗?

javascript - 在 HTML5 Canvas 中将图像裁剪成椭圆形

java - 将数组的字符串表示形式转换为 Java 中的数组

sql - 如何根据事件的日期、时间和持续时间检查 SQL 表中的平均并发事件?

javascript - 如何在 Cypress 中重复请求直到得到不同的响应

javascript - 在javascript中对并行数组进行排序

arrays - Swift 4 - 如何从数组中返回重复值的计数?

algorithm - 如何随机选择地球表面的一个点?

计算字符串的单词