二分查找:
通过二分查找快速找到目标值,然后将目标值的 index 扩散到目标值两边
class Solution {
public:
int search(vector<int>& nums, int target) {
if (!nums.size()) return 0;
int low = 0;
int high = nums.size() - 1;
int pivot;
while (low <= high) {
pivot = low + ((high - low) >> 1);
if (nums[pivot] == target) {
break;
}
else if (target < nums[pivot]) {
high = pivot - 1;
}
else {
low = pivot +1;
}
}
if (low >high) return 0;
low = pivot - 1;
high = pivot + 1;
while (0 <= low && nums[low] == target) --low;
while (high <= nums.size() - 1 && nums[high] == target) ++high;
return high - low - 1;
}
};