二分法+数组下标区间

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

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

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
       if(array.length==0) return 0;
       int res=BinSearch(array,k);
       if(res==-1) return 0;
       int low=res-1;
        int hight=res+1;
       while(low>-1 && array[res]==array[low] ){
           low--;
       }
        while(hight <array.length && array[res]==array[hight]){
            hight++;
        }

        return hight-low -1;
    }

    public int BinSearch(int[] arr, int k){  //二分法查找出一个元素的数组下标
        int low=0;
        int hight=arr.length-1;
        while(low<=hight){
            int mid=(low+hight)/2;
            if(arr[mid]==k) {
                return mid;
            }else if(arr[mid]>k){
                hight=mid -1;
            }else{
                low=mid+1;
            }
        }

        return -1;  //找不到
    }
}
全部评论
while(low>-1 && array[res]==array[low] ) 这个low>-1注意下
点赞 回复 分享
发布于 2020-09-01 14:15

相关推荐

05-12 16:04
已编辑
江西财经大学 Java
点赞 评论 收藏
分享
震撼沃玛一整年:查看图片
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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