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

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

http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2

几种简单条件判断——数组长度都为0,返回0;数组长度为1,且元素值等于k,返回1;数组长度大于1时,则按照下面原则求解:
找到数组中值等于k的第一个元素和最后一个元素。采用二分法求解速度快,若采用遍历,在数据量庞大时计算量也很大。

class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.empty())
            return 0;
        if(data.size()==1 && data[0]==k)
            return 1;

        int first = 0;
        int last = data.size()-1;
        if(first==last)
            return 0;

        int cnt=0;
        while(cnt==0 && first<=last)
        {
            int mid = (first+last)/2;
            if(data[mid]<k)
            {
                first = mid+1;
            }
            else if(data[mid]>k)
            {
                last = mid-1;
            }
            else
            {
                while(data[first]!=k&&data[first+1]!=k)
                {
                    first = (mid+first)/2;
                }
                while(data[last]!=k&&data[last-1]!=k)
                {
                    last = (mid+last)/2;
                }
                cnt = (data[last]==k?last:last-1)-(data[first]==k?first:first+1)+1;
            }
        }

        return cnt;
    }
};
全部评论

相关推荐

孤寡孤寡的牛牛很热情:为什么我2本9硕投了很多,都是简历或者挂,难道那个恶心人的测评真的得认真做吗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务