javascript - 在 O(n) 内获取两个数组之间所有可能的乘法值?

标签 javascript arrays performance nested multiplication

在从 (n>0) 开始的数字序列中,我需要找到两个数字,当它们彼此相乘时,返回的值与序列总和减去这些数字的总和相同(sum - (x+y ))。我已经编写了一个程序,但我认为效率不够。有没有一种方法可以在不嵌套循环的情况下获得相同的结果? 这是我的代码:

function removeNb (n) {

result = [];
var sum = (n*(n+1))/2

for(var x=n; x > 0; x--){
  for(var y = 1; y<=x; y++){

  z= x*y;
  var r = sum-(y+x);

  if(z == r){
  result.push([y,x],[x,y])} *//because with inverted loops (y++, x--) only unique values are left.*
  }
 return result;
} 

最佳答案

到目前为止,您的解决方案的复杂度为 O(n^2)。据我所知,该序列不是随机的。它是序列 1, 2, 3 ... N。我假设从下面的行 sum = (n*(n+1))/2。

现在让我们看一下方程 r = z,它实际上是 x*y = sum - x - y。您可以创建一个循环,将 x 从 1 迭代到 n 并计算 y。 Y =(总和 - x)/(x +1)。如果 y 等于或小于 N,则有一个解 (x,y)。使用这种方法,您将创建一个循环,复杂度将为 O(n)。

您还可以预先计算值并将其存储为数组。如果 n 在某个小范围内,此解决方案很有用。

关于javascript - 在 O(n) 内获取两个数组之间所有可能的乘法值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33324136/

相关文章:

javascript - 设置 javascript 时间以在页面未刷新时发出警报

javascript - 新item进入时状态为true,5秒后状态为false

python - Python 中的重叠积分 - 将结果存储在数组中

java - 创建二维 int 数组时出现内存不足异常

php - MySQL 5.6 需要很长时间才能连接,即使是 "MySQL 5.6 Command Line Client"

JavaScript es6从另一个类调用静态函数

javascript - 自动添加 Bootstrap 轮播控制按钮

arrays - bash 中的数组运算

c - 数组打印奇怪的数字

python - 从文本文件创建 numpy 数组的最快方法