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

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

例如输入排序数组 [1,2,3,3,3,3,4,5] 和数字 3,由于 3 在这个数组中出现了 4 次,因此输出 4。

数据范围:

数组长度 [0,1000]。

样例:

输入:[1, 2, 3, 3, 3, 3, 4, 5], 3
输出:4

代码:

class Solution {
    public int getNumberOfK(int[] nums, int k) {
        //处理空数组情况
        if(nums.length == 0)return 0;
        //第一次二分查找:寻找k的起始位置(左边界)
        int l1 = 0,r1 = nums.length-1;
        while(l1<r1){
            //计算中间位置
            int mid = l1+r1>>1;
            //如果中间值大于等于k,调整右指针
            if(nums[mid]>=k)r1 = mid;
            //否则调整左指针
            else l1 = mid+1;
        }
        //第二次二分查找:寻找k的结束位置(右边界)
        int l2 = 0,r2 = nums.length-1;
        while(l2<r2){
            //计算中间位置
            int mid = (l2+r2+1)>>1;
            //如果中间值小于等于k,调整左指针
            if(nums[mid]<=k)l2 = mid;
            //否则调整右指针
            else r2 = mid-1;
        }
        //如果左右边界都不等于k,说明数组不存在k
        if(nums[l1]!=k&&nums[l2]!=k)return 0;
        //否则返回k出现的次数
        else return l2-l1+1;
    }
}
posted @ 2025-05-30 10:47  回忆、少年  阅读(15)  评论(0)    收藏  举报