数字在排序数组中出现的次数--二分

发布时间 2023-11-27 20:40:50作者: solutide

题目描述

image

  • 有序序列二分
    image
  • 先对左端点进行二分
  • 再对右端点二分
    最后得到两个端点,直接相减+1,得到区间个数
class Solution {
public:
    int getNumberOfK(vector<int>& nums , int k) {
        if(nums.empty()) return 0;
        int l=0,r=nums.size()-1;
        while(l<r){
            int mid=l+r>>1;
            if(nums[mid]<k) l=mid+1;
            else r=mid;
        }
        if(nums[l]!=k) return 0;
        int left = l;
        l=0,r=nums.size()-1;
        while(l<r){
            int mid = l+r+1>>1;
            if(nums[mid]<=k) l=mid;
            else r=mid-1;
        }
        return r-left+1;
    }
};