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

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

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

二分法 分别找到第一个大于等于k的元素,和第一个小于等于k的元素
public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array.length==0){
            return 0;
        }
       int len=array.length;
       int left=0;
       int right=len-1;
        int mid=0;
       while(left<right){
            mid=left+(right-left)/2;
           if(array[mid]>=k){
               right=mid;
           }else if(array[mid]<k){
               left=mid+1;
           }
        }
        int i=0;
        if(array[left]==k){
             i=left;
        }else{
            return 0;
        }
        
        left=0;
        right=len-1;
        while(left<right){
            mid=left+(right-left+1)/2;
           if(array[mid]<=k){
               left=mid;
           }else if(array[mid]>k){
               right=mid-1;
           }
        }
        int j=0;
        if(array[left]==k){
             j=left;
        }else{
            return 0;
        }
        return j-i+1;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务