[LintCode]Inorder Successor in BST
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;
}
}
本文介绍了一种在大型已排序数组中查找特定目标值的有效算法。通过预先优化搜索范围,结合二分查找技术,该算法能在O(log n)的时间复杂度内完成查找,并返回目标值在数组中的位置。
490

被折叠的 条评论
为什么被折叠?



