34 Search for a Range
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4]int binary_search(vector<int> &nums, int low, int high, int key) {
if (high < low) return -1;
int median = low + ((high - low) / 2);
if (nums.at(median) == key) {
return median;
}
else if (nums.at(median) < key) {
// search right
return binary_search(nums, median + 1, high, key);
}
else {
// search left
return binary_search(nums, low, median - 1, key);
}
}
vector<int> searchRange(vector<int>& nums, int target) {
vector<int> range(2);
// find the number
int index = binary_search(nums, 0, nums.size() - 1, target);
if (index == -1) {
return range = { -1, -1 };
}
else {
// expand right
int i;
for (i = index; i < nums.size(); i++) {
if (nums.at(i) != target) {
break;
}
}
// expand left
int j;
for (j = index; j >= 0; j--) {
if (nums.at(j) != target) {
break;
}
}
return range = { j + 1, i - 1 };
}
}Last updated