剑指offer-数字在排序数组中出现的次数

题目描述

统计一个数字在排序数组中出现的次数。


可以用二分查找找出数字在数组的最左端和最右端,找最左端和最右端在方法实现上的区别主要在于对 nums[m] == K 的处理:

  • 找最左端令 h = m - 1
  • 找最右端令 l = m + 1
public class Solution {
    public int GetNumberOfK(int [] array , int k) {
       int l = getFirstK(array,k);
        int h = getLastK(array,k);
        return h-l+1;
    }
    
    public int getFirstK(int[] array , int k){
        int l = 0, h = array.length-1;
        while(l<=h){
            int mid = l+(h-l)/2;
            if(array[mid]>=k)h = mid-1;
            else l = mid+1;
        }
        return l;
    }
    
    public int getLastK(int[] array , int k){
         int l = 0, h = array.length-1;
        while(l<=h){
            int mid = l+(h-l)/2;
            if(array[mid]>k)h = mid-1;
            else l = mid+1;
        }
        return h;
    }
}
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页