如何找到數組(或一個數組),其中第一個和第二個數值位於它們之間? 我的意思是未來:包含所需值的範圍的搜索數組
arrays = [[0,453],[454,820],[821,1350]];
values = [320,519]
在這種情況下,我們返回:
[0,1] //320 =< [0,453] < 519 =< [454,820]
對於值[30,450]:
[0,0] //30 =< [0,453] >= 450
或[20,1200]:
[0,2] //20 =< [0,453] <1200> [454,820] <1200>= [821,1350]
我試圖寫簡單而且快速算法但困難(知識的缺乏)對質......並將其寫入「原樣」 ...:
//pseudocode
arrays = [[0,10074],[1075,1393],[1394,1418]]
values = [500,700]
for (i=0;i<arrays.length;i ){
if(arrays[i][0]<values[0]){
first = i;
if(arrays[i][1]>values[1]){
second = i;
} else if (arrays[i 1][1]>values[1]){
second = i;
}
return [first, second]
}
}
是否有此問題的最佳方式?是否值得重寫並完成上面的僞代碼?
@thefourtheye和@Tibos對不起 - 我不能選擇最佳答案。
回答thefourtheye - 非常快速的解決方案,Tibos - 真正乾淨的代碼。
不同的目標 - 不同的最佳答案。
如果該值不在任何範圍內,應該返回什麼? (-1?Null?) – nnnnnn
這看起來不正確'數組[i 1] [1]>值[1]' – elclanrs
我不認爲我的解決方案是緩慢的。顯然還有改進的空間(例如,在整個範圍內使用二進制搜索),但這會增加複雜性。我做了一個jsPerf來測試所有(工作)解決方案的速度,並且我的可疑程度似乎是最快的。如果您發現錯誤,請編輯它。 http://jsperf.com/rangefinder – Tibos