[LintCode]Search in a Big Sorted Array
public class Solution {
/**
* @param A: An integer array
* @param target: An integer
* @return : An integer which is the index of the target number
*/
public int searchBigSortedArray(int[] A, int target) {
// 2015-10-13 二分搜索的改进
if (A == null || A.length == 0) {
return -1;
}
// 优化end以缩小搜索范围
int end = 0;
while (end < A.length -1 && A[end] < target) {
end = end * 2 + 1;
if (end >= A.length) {
end = A.length - 1;
}
}
// 二分搜索
int start = 0;
while (start < end - 1) {
int mid = start + (end - start) / 2;
if (A[mid] >= target) {
end = mid;
} else {
start = mid;
}
}
if (A[start] == target) {
return start;
}
if (A[end] == target) {
return end;
}
return -1;
}
}