可以說我有數字像這樣的數組:在陣列獲取兩個最接近的號碼值
var a = [4, 5, 7, 9, 12, 15, 18, 19, 20, 23, 27, 31];
它是按升序排序,現在,讓我們說我挑x的值:
var x = 13;
如何找到最接近x的哪兩個值?
在這種情況下,它將是12和15,但是如何獲得這兩個給定的x,並且如果x低於最低值,那麼只返回最低值,如果它大於最大值,只返回最大值,如果x = 3,那麼只返回一個值,4?
我已經試過這樣:
function getClosest(a, x) {
for (var i = 0; i < a.length - 1; i++) {
var c1 = a[i],
c2 = a[i + 1];
if (x > c1 && x < c2) return [c1, c2];
else if (i == 0) return [c1];
else if (i == a.length - 2) return [c2];
}
}
現在,這是我的做法,你將如何解決這個問題/什麼是最有效的解決方案呢?
爲什麼你認爲你的代碼是馬虎?什麼樣的方法會更好? – JordanHendrix
代碼審查可能對此問題更好 – 2426021684
似乎對我很好,但你也可以做一個二進制搜索以及數組排序。在大型數組上更高效。 – 2016-06-12 20:00:52