其他分享
首页 > 其他分享> > JZ37 剑指offer 数字在升序数组中出现的次数

JZ37 剑指offer 数字在升序数组中出现的次数

作者:互联网

第37题 数字在升序数组中出现的次数

题目描述

统计一个数字在升序数组中出现的次数。

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        int lb = 0, rb = 0;
        int l = 0, r = data.size();
        while(l<r){
            int mid = l + (r-l)/2;
            if(data[mid]< k) l=mid+1;
            else r = mid;
        }
        lb = l;
        l = 0, r = data.size();
        while(l<r){
            int mid = l + (r-l)/2;
            if(data[mid]<=k) l=mid+1;
            else r = mid;
        }
        rb = l;
        return rb-lb;
    }
};

思路:
利用二分查找出该数的左右边界,找左边界时候,如果mid值小于k,左指针移到mid+1处,如果mid值大于等于k,右指针移到mid处。
找右边界(第一个大于k的位置)的时候,如果mid值小于等于k,左指针移到mid+1,如果mid值大于k,右指针移到mid处。

标签:移到,offer,int,mid,JZ37,升序,data,指针
来源: https://blog.csdn.net/KazeHelloWorld/article/details/112803589