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

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

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

/*
二分搜索到后,分别向两边扩展。看有多少相等的
*/
public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array.length==0) return 0;
        int low=0,high=array.length-1;
        int count=0;
        while(low<=high){
            int mid = low+(high-low)/2;
            if(array[mid]<k) low=mid+1;
            else if (array[mid]>k) high = mid-1;
            else {
                int a = mid-1;  // 当前元素不要重复计算
                int b = mid;  

                // 向前面扩展
                while(a>=0 && array[a]==k){
                    count++;
                    a--;
                }
                // 向后面扩展
                 while(b<array.length && array[b]==k){
                    count++;
                    b++;
                }
                break;  // 因为扩展完所有相等的元素就肯定都找到了,所以没有必要再进入下一次while
            }

        }
        return count;

    }
}
全部评论

相关推荐

06-02 15:17
门头沟学院 Java
心爱的idea:怎么会呢 应该是打招呼有问题 问就说实习6个月全国可飞随时到岗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 12:10
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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