题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
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; } };