Javascript号码间隔搜索优化

时间:2018-03-08 09:35:16

标签: javascript arrays optimization numbers

正如话题所说,当遇到大量间隔时,我遇到了优化问题

变量:FirstPrice,LastPrice,Increment和用户编写的数字

任务:需要在特定时间间隔内将数字舍入到一侧或另一侧。

实施例: FirstPrice = 0.99,LastPrice = 9.99,Increment = 1用户数= 5.35

工作流: 我需要找到一个数字存在的区间,我能想到的是将数字推入数组。因此对于此示例数组将是: [ “0.99”, “1.99”, “2.99”, “3.99”, “4.99”, “5.99”, “6.99”, “7.99”, “8.99”, “9.99”]。 然后我使用for循环来查找存在于哪个区间(在本例中为number = 5.35)的数字。在这种情况下,间隔将从4.99到5.99。然后用户号码更新为4.99或5.99。

问题: 这样做数量少,效果很好。但是执行高范围真的很难。例如。如果FirstPrice = 1 LastPrice = 1000000并且Increment = 1.那么我的数组会获得数千个值,并且将每个值推入数组并查找数字需要太长时间。数组得到~9999999的值,然后循环遍历所有值以找到特定的间隔。

所以我认为我的问题很清楚。优化。我需要一种更好的方法来做到这一点。我试过将价格范围缩小到一半,但间隔时间不对。尝试使用插入的数字,但发生了同样的问题。

1 个答案:

答案 0 :(得分:0)

如果我错了,请纠正我,但不是这样:

lower = floor((q - s) / i) * i + s
upper = lower + i

其中:

q = User number
s = FirstPrice
i = Increment 



function foo(q, s, i) {
  const lower = Math.floor((q - s) / i) * i + s;
  const upper = lower + i;

  return [lower, upper];
}

console.log(
  foo(5.35, 0.99, 1),
  foo(5.35, 0.99, 2),
  foo(5.35, 0.99, 3)
);