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

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

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

思路分析:
     1.通过二分查找,先查询出目标值的左边界,如果目标值存在,则左边界是第一个目标值所出现的位置 否则是第一个大于目标值的位置
     2.再找出右边界,第一个大于目标值的位置
     3.右边界 - 左边界 即为目标值出现的次数


public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        int left = 0;      //左边界
        int right = 0;      //右边界
        int l = 0, r = array.length;
        
        //寻找左边界  如果存在目标值 则指向第一个目标值 如果不存在则指向大于目标值的第一个值
        while(l < r){
            int mid = l + (r-l)/2;
            if(array[mid] < k){   //中间值小于k时 目标值就在mid右边
                l = mid + 1;      //只有mid + 1才可能出现与目标值相等的情况
            }else{
                r = mid;          //中间值大于等于k时 目标值就在mid左边
            }
        }
        
        left = l;
        l = 0;
        r = array.length;
        
        //寻找右边界 找到大于目标值的第一个值
        while(l<r){
            int mid = l + (r-l)/2;
            if(array[mid] <= k){ //中间值小于等于目标值 则目标值在其右边
                l = mid + 1;
            }else{
                r = mid;
            }
        }
        
        right = l;    
        return right - left; 
    }
}


全部评论

相关推荐

点赞 评论 收藏
分享
求面试求offer啊啊啊啊:这个在牛客不是老熟人了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务