我有一个整数序列列表:
[10,15,30,45,60,75,90 ...... N * 15]
让我们说你有一个值,即33 我应该做什么计算才能在上面的序列中找到最接近的值33? (JavaScript的) 我们可以在没有循环的情况下找到它吗?
感谢。
答案 0 :(得分:1)
正如其他人已经指出的那样,如果你使用15
的倍数(假设序列以10
开头是错误的),那么你可以简单地执行以下操作:
var interval = 15;
var value = 33;
var closest = Math.round(value / interval) * interval;
console.log(closest);
答案 1 :(得分:0)
你没有指定任何语言,所以这里有一些伪代码。此外,我假设序列实际上是15*n
,并且必须有0
而不是10
作为第一个元素。假设序列形式为0
到15*N
,测试值为test
。恕我直言,最简单的算法如下:
if(test <= 0)
return 0
else if (test >= 15*N)
return 15*N
else {
lower = Math.floor(test/15)
upper = lower + 1
lowerDif = test - 15*lower
upperDif = 15*upper - test
if (lowerDif < upperDif)
return 15*lower
else
return 15*upper
}
您的想法是,您需要检查test
是否在[0; 15*N]
范围内。如果否 - 返回边界,否则检查索引Math.floor(test/15)
和Math.floor(test/15) + 1
处的两个值。确实
Math.floor(test/15) <= test < Math.floor(test/15) + 1
所以答案就越接近。