的第一次出現的二進制搜索我有代碼,搜索一個排序後的數組,並返回k的第一次出現的索引。 我想知道是否它可以編寫使用對於k
while(left<right)
,而不是
while(left<=right)
下面這段代碼是全碼:
public static int searchFirstOfK(List<Integer> A, int k) {
int left = 0, right = A.size() - 1, result = -1;
// A.subList(left, right + 1) is the candidate set.
while (left <= right) {
int mid = left + ((right - left)/2);
if (A.get(mid) > k) {
right = mid - 1;
} else if (A.get(mid) == k) {
result = mid;
// Nothing to the right of mid can be the first occurrence of k.
right = mid - 1;
} else { // A.get(mid) < k
left = mid + 1;
}
}
return result;
}
我如何知道何時使用左邊是小於或等於正確的,或者只是使用左邊是不正確的。
爲什麼當左+ 1 ==右停? –
由於初始化技巧,它根本不需要。 @MattTimmermans我編輯了一下..現在檢查 – coderredoc
OIC。這很不錯,但是當所有的元素大於或小於你要找的元素時,它就會中斷。你需要一個額外的支票 –