剑指offer:统计一个数字在排序数组中出现的次数

分别定义低位0和高位n-1,当低位小于等于高位时,定义个中值mid(用的二分),如果数组的中值比k要大,那么把高位放到mid-1处,同理,小的话,把低位放到mid+1,都不满足说明和k相等,但存在不只一个满足,所以要遍历和k都相等的值,然后用了两个while循环,分别求总数,最后输出!!!

class Solution{
public:
int GetNumberOfK(vector<int> data,int k){
    int low= 0,high= data.size()-1;
    if(high==-1) return 0;
    while(low<=high) {
        int mid =low+(high -low)/2;
        if(data[mid] >k) high=mid-1;
        else if(data[mid]<k) low= mid+1;
        else{
            int count=0;;
            count++;
            int  index=mid-1;
            while(index>=0 && data[index]==k){
                count++;
                index--;

            }
            index=mid+1;
            while(index<=data.size()-1 && data[index]==k){
                count++;
                index++;

            }
            return count;

        }
    }
    return 0;

}
};

#剑指offer##23届找工作求助阵地#
全部评论
并不需要遍历相等元素,两次二分找首尾下标即可
点赞 回复 分享
发布于 2023-04-17 15:04 湖北

相关推荐

ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务