【发布时间】:2014-03-28 00:24:20
【问题描述】:
什么:我有一个角度从 0 到 360 的数组,输入了一个预定义的范围,并定期更新了从 0 到 360 的输入。我想检查输入是否在数组的预定义范围。
示例
array:
array[0]=100, array[1]=40, array[2]=320, array[3]=60, etc....
我需要做的是看看输入是否可以说
input:
input=50;
在数组中任意值的范围内
range:
range=25;
我需要代码做什么: 下限 = 输入范围 & 上限 = 输入+范围 如果数组中存在下限和上限之间的值,则输出数组编号。
完成示例: input-range=25 & input+range=75 所以如果数组中存在 25 和 75 之间的值
array[1]=40 & array[3]=60 在该范围内。
输出数组键:
output[0]=1, output[1]=3
方法: 创建一个新的嵌套数组,将范围添加到每个数组组件中的值并从中减去。然后是一个 for 循环来检查输入是否在任何值内。
示例解决方案:
var nodeArray=new Array();
for(var i = 0; i<array.length;i++){
nodeArray[i].push(array[i]-range);
nodeArray[i].push(array[i]+range);
}
then the function to check:
for(var j=0;i<array.length;i++){
if ((input>nodeArray[j][0])&&(input<nodeArray[j][1])){
alert("within range");
}
}
问题:我需要一个快速执行的解决方案,因为执行时间对我来说很重要,我只是想知道是否有人对如何解决这个问题有更好的想法。
注意:我也没有解决折叠问题(350度+20度=10度)
【问题讨论】:
-
那么这段代码就可以工作了,这就是你的意思吗?
-
为什么不一开始就对数组进行排序呢?然后,您可以使用二进制搜索轻松检查。
-
@Andy - 它的功能并不完全,但很接近。我还没有解决翻车问题。如果有人有更好的方法,我很感兴趣。更好是指更快的执行。这对我来说似乎是一个臃肿的解决方案。
-
@AkshatSinghal 二进制搜索如何在执行时间方面增加?我没有想过要走那条路,因为直觉上它会更慢,但这可能是一个非常不正确的假设。
-
对于折叠你只需要插入模运算
(someangle+range)%360就是这样
标签: javascript jquery arrays search