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

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

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

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array.length == 0){
            return 0;
        }
        // 有序数组,想到用二分法来解决找数据
        int left = 0 , right = array.length - 1 , mid = 0;
        while(left < right){
            mid = left + (right - left)/2;
            if(array[mid] > k){
                right = mid;
            }else if(array[mid] < k){
                left = mid + 1;
            }else{
                break;
            }
        }
        int count = 0;
        if(array[mid] != k){
            return count;
        }
        // 左边
        for(int i = mid;i >= 0; i-- ){
            if(array[i] == k){
                count++;
            }
        }
        // 右边
        for(int i = mid; i < array.length; i++){
            if(array[i] == k){
                count++;
            }
        }
        return count-1;
       
    }
}

思路:二分法找到具体在哪,然后连续找左右两边的个数计数。

全部评论

相关推荐

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