javascript - 需要优化功能

标签 javascript algorithm

我正在研究这个函数,它必须返回添加 ab n 次的所有可能值,例如如果 n = 1 那么可能的值将是 a + a a + bb + b。下面的功能有效,但它太慢了,我想优化它。有什么建议么?非常感谢!

function processData(n, a, b){
  var ans = [0];
  for(var i = 0; i < n; i++){
    var temp = [];
    for(var j = 0; j < ans.length; j++){
      var aa = ans[j] + a;
      if(temp.includes(aa) === false){
       temp.push(aa);
      }
      var bb = ans[j] + b;
      if(temp.includes(bb) === false){
        temp.push(bb);
      }
    }
    ans = temp;
  }
  ans.sort(function(a, b){return a - b});
  return ans;
}

最佳答案

function processData(n, a, b) {
  var ans = [];
  if (a == b) {
    for (var i=0; i<n+1; i++) {
      ans.push(a * n);
    }
    return ans;
  } else if (a > b) {
    var temp = a;
    a = b;
    b = temp;
  }
  var diff = b - a;
  for (var i=0; i<n+1; i++) {
      ans.push(a * n + diff * i);
  }
  return ans;
}

好的,这是迄今为止最有效的解决方案。我刚刚在 fiddle 上测试过它.

所有其他三个解决方案都大大优于您的解决方案。我的比@abc123 的好,因为不需要排序,比@georg 的好,因为不需要使用集合或排序。

关于javascript - 需要优化功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40682247/

相关文章:

javascript - 圆形按钮 CSS 加载动画

javascript - 分页算法工作不正确

javascript - 在客户端 Mocha 单元测试期间使用外部类

javascript - 从剪贴板获取粘贴的图像 Firefox

javascript - 错误/不当行为的浏览器嗅探替代方案(不缺乏功能)

php - 以编程方式返回两个 json 文件差异的最佳方法

algorithm - 有什么简单的方法可以进行 2^32 - 1 运算的模数吗?

algorithm - 匈牙利算法 - 系统分配

algorithm - 输入查询的 sqrt 分解

javascript - 一些 Raphael 标签没有出现在 Linechart Mouseover 上