所以我遇到了一個巨大的障礙....也許這只是因爲我的邏輯不存在,但我似乎無法自己弄清楚這一點。修改後的二進制搜索java
我試圖修改BinarySearch
以便它會獲得兩個索引。
首先索引是給定的數,X,和最右側的最遠左手食指。如果該數字不存在,則它會生成[-1,-1]。
反正。我一直在嘗試修改BinarySearch並且似乎無法使其工作。任何指針將不勝感激。
public static Pair BinarySearchDup(int[] A, int x, int low, int high){
int mid = (low + high)/2;
int left = -1, right = -1;
while(low <= high){
mid = (low + high)/2;
if(A[mid] == x){
int newMid = mid;
//check left
if(left == -1){
left = mid;
return BinarySearchDup(A, x, low, mid - 1);
}
else if(right == -1){
right = mid;
return BinarySearchDup(A, x, newMid + 1, high);
}
return new Pair(left, right);
}
else if(A[mid] < x)
return BinarySearchDup(A, x, mid + 1, high);
else// (A[mid] > x)
return BinarySearchDup(A, x, low, mid - 1);
}
//if there are no matches of the number then it returns -1
return new Pair(-1, -1);
}
謝謝,但我只是跟我的老師談過,結果我做錯了。我本來應該修改BS ......的迭代版本,這使事情變得更容易! – kevorski 2013-04-08 17:46:34
@Patashu我沒有得到你的答案。你能用例子來解釋我嗎?你如何進入O(logN)複雜性?但首先請解釋你的方法如何工作? – 2013-09-12 21:05:19