Search in a Big Sorted Array
Question
Example
Given [1, 3, 6, 9, 21, ...], and target = 3, return 1.
Given [1, 3, 6, 9, 21, ...], and target = 4, return -1.Analysis
Code
public int searchBigSortedArray(ArrayReader reader, int target) {
// use log increment to find an end first
int index = 1;
while (reader.get(index - 1) < target) {
index = index * 2;
}
// find first pos of target
int start = 0, mid, end = index - 1;
while (start + 1 < end) {
mid = start + (end - start) / 2;
if (reader.get(mid) == target) {
end = mid;
} else if (reader.get(mid) < target) {
// median < target, search right section
start = mid + 1;
} else {
// median > target, search left section
end = mid - 1;
}
}
if (reader.get(start) == target) {
return start;
} else if (reader.get(end) == target) {
return end;
} else {
return -1;
}
}Last updated