题解 | #数组在升序数组中出现的次数#

数字在升序数组中出现的次数

https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=265&rp=1&ru=%2Fexam%2Foj%2Fta&qru=%2Fexam%2Foj%2Fta&sourceUrl=%2Fexam%2Foj%2Fta%3FjudgeStatus%3D3%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D13%26type%3D265&difficulty=&judgeStatus=3&tags=&title=&gioEnter=menu

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
      if (data.empty()) {
        return 0;
      }
      
      //  升序数组
      int left = 0, right = data.size() - 1, mid = 0;
      int res = 1;
      
      while (left <= right) {
        mid = left + (right - left) / 2;
        if (data[mid] == k) {
          break;
        } else if (data[mid] > k) {
          right = mid - 1;
        } else {
          left = mid + 1;
        }
      }
      
      if (left > right) {
        return 0;
      }
      
      left = right = mid;
      --left, ++right;
      
      while (left >= 0 && data[left--] == k) {
        ++res;
      }
      while (right < data.size() && data[right++] == k) {
        ++res;
      }
      
      return res;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务