统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
- 提示:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums 是一个非递减数组
-109 <= target <= 109
思路:通过二分法分别找到左边第一个target出现的位置和右边最后一个target出现的位置,用左边的减去右边的。
int search(vector<int>& nums, int target) {
int l = 0, r = nums.size() - 1;
int j = r;
while (l <= j) {
int mid = (l + j) / 2;
if (nums[mid] < target) {
l = mid + 1;
} else {
j = mid - 1;
}
}
j = l;
while (j <= r) {
int mid = (j + r) / 2;
if (nums[mid] <= target) {
j = mid + 1;
} else {
r = mid - 1;
}
}
return r - l + 1;
}