剑指offer(Java实现)53 - 数字在排序数组中出现的次数

数字在排序数组中出现的次数-53-1

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

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

样例

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

思路:

先用二分法找到目标值,然后使用两个指针从中间扩散。

class Solution {
    public int getNumberOfK(int[] nums, int k) {
        int first = 0, last = 0;
        int left = 0, right = nums.length - 1;
        while(left <= right){
            int mid = left + (right - left) / 2;
            if(nums[mid] == k){
                left = right = mid;
                while(left > 0 && nums[left-1] == nums[mid]) left--;
                while(right < nums.length-1 && nums[right+1] == nums[mid]) right++;
                return right - left + 1;
            }else if(nums[mid] > k) right = mid - 1;
            else left = mid + 1;
        }
        return 0;
    }
}

你可能感兴趣的:(剑指offer(Java实现)53 - 数字在排序数组中出现的次数)