Open
Description
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
限制:
- 0 <= 数组长度 <= 50000
数组有序,用两次二分查找,第一次找第一个=target的元素,第二次找第一个>target的元素,返回值是两个元素的索引相减。代码如下:
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size();
int left = 0, right = n;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] < target) left = mid + 1;
else right = mid;
}
if (right >= n || nums[right] != target)
return 0;
int start = right;
left = start, right = n;
while (left < right) {
int mid = left + (right - left) / 2;
if (nums[mid] <= target) left = mid + 1;
else right = mid;
}
return right-start;
}
};
Metadata
Metadata
Assignees
Labels
No labels