题解 | 数字在升序数组中出现的次数
数字在升序数组中出现的次数
https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param k int整型
* @return int整型
*/
int GetLeftMostPos(const vector<int>& nums, int k) {
int m = nums.size();
int left = 0;
int right = m - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] >= k) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return (left < m && nums[left] == k) ? left : -1;
}
int GetRightMostPos(const vector<int>& nums, int k) {
int m = nums.size();
int left = 0;
int right = m - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] <= k) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return (right >= 0 && nums[right] == k) ? right : -1;
}
int GetNumberOfK(vector<int>& nums, int k) {
// write code here
int leftMost = GetLeftMostPos(nums, k);
int rightMost = GetRightMostPos(nums, k);
return rightMost >= leftMost && leftMost >= 0 ?
(rightMost - leftMost + 1) : 0;
}
};
