题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
class Solution {
private:
int findIndexNums(vector<int>& nums, int index) {
/*
找到和对应下标的值相同的元素个数
*/
// 向左寻找
int leftIndex = index;
int rightIndex = index;
while(leftIndex>=0 && nums[leftIndex] == nums[index]){ // 向左寻找
leftIndex--;
}
while (rightIndex<=nums.size()-1 && nums[rightIndex] == nums[index]){ // 向右寻找
rightIndex++;
}
return rightIndex-leftIndex-1;
}
public:
int GetNumberOfK(vector<int>& nums, int k) {
// 数组为空 或 k不在nums中 均返回0
if (nums.empty()) return 0;
int left = 0;
int right = nums.size() - 1;
int midIndex;
while (left <= right) {
midIndex = left + (right - left) / 2;
if (nums[midIndex] == k) {
int result = findIndexNums(nums, midIndex); // 计算同一值出现的次数
return result;
} else if (nums[midIndex] > k) {
// left = midIndex+1;
right = midIndex-1;
} else if (nums[midIndex] < k) {
// right = midIndex-1;
left = midIndex+1;
}
}
return 0;
}
};
查看7道真题和解析
