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

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

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;

    }
}
全部评论

相关推荐

不知道怎么取名字_:两个方向 1.简历针对性准备下 2.面试前也需要准备的 主要还是要看各个公司需求,看公司行业和岗位描述,那里面已经写了对技术的需求,一份简历,不可能和所有嵌入式岗位都匹配的
投递北京经纬恒润科技股份有限公司等公司6个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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