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

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

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.empty())
            return 0;
        int bejin=0,end=data.size()-1,m=-1,num=0,n=-1;
        int i=0;
        while(bejin<=end)
        {
            i=(bejin+end)/2;
            if(data[i]>k)
                end=i-1;
            else if(data[i]<k)
                bejin=i+1;
            else if(data[i]==k)
            {
                m=i;
                break;
            }
        } 
        if(m>=0)
        {
            n=m;
            while(data[m]==k)
            {
                    num++;
                    m++;
            }
            while(data[n-1]==k)
            {
                    num++;
                    n--;
            }
        }
        return num;
    }
};

1.在冒泡排序中,需要注意的是,可以从0,也可以吃1开始进行计算()区别在与取数组下标的时候就不要-1了,直接用变量即可
2.大神解法:利用二分法定位k+0.5和k-0.5的位置,然后两位置相减。
3.int mid = (e - s)/2 + s;注意二分法中取中间值要这么写,不然会有bug;

全部评论

相关推荐

用微笑面对困难:你出于礼貌叫了人一声大姐,大姐很欣慰,她真把你当老弟
点赞 评论 收藏
分享
牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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