Search in a Big Sorted Array
class Solution {
public:
/**
* @param reader: An instance of ArrayReader.
* @param target: An integer
* @return: An integer which is the first index of target.
*/
int searchBigSortedArray(ArrayReader *reader, int target) {
// write your code here
int index = 0;
while (reader->get(index) != -1 && reader->get(index) < target ) {
index = index * 2 + 1;
}
int start = 0;
int end = index;
while (start + 1 < end) {
int mid = start + (end - start) / 2;
if (reader->get(mid) == target) {
end = mid;
} else if (reader->get(mid) == -1 || reader->get(mid) > target) {
end = mid;
} else {
start = mid;
}
}
if (reader->get(start) == target) {
return start;
}
if (reader->get(end) == target) {
return end;
}
return -1;
}
};Last updated