剑指 数字在排序数组中出现的次数

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

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

二分法 找到k的位置mid,然后k必然在left和right之间,遍历即可

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
       if(array==null||array.length==0) return 0;
        int left=0,right=array.length-1;
        int mid=0,cnt=0;
        while(left<right){
            mid=left+(right-left)/2;
            if(array[mid]>k)
                right=mid-1;
            else if(array[mid]<k)
                left=mid+1;
            else{
                break;
            }
        }
        for(int i=left;i<=right;i++)
            if(array[i]==k)
                cnt++;
        return cnt;

    }
}
全部评论
找到了应该从mid向两边发散而不是遍历left->right
点赞 回复 分享
发布于 2021-05-09 23:19
运行超时了
点赞 回复 分享
发布于 2021-07-18 11:40
当第一次中间的元素就等于k值,此时,left ,right 的就没动过,在开头和结尾,你再从left ,right 之间找,时间复杂度0(N)
点赞 回复 分享
发布于 2021-09-23 21:05

相关推荐

找不到工作死了算了:你已经熟练掌握c语言啦,可以投简历参加秋招了
点赞 评论 收藏
分享
评论
10
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务