【剑指 Offer 53 - I】 在排序数组中查找数字 I

题目

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

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

限制:

0 <= 数组长度 <= 50000

解题思路

二分查找缩减范围
利用二分的思想,排除数组中左侧不包含给定数字的部分,再另一部分中遍历查找输出出现次数

代码

class Solution {
    public int search(int[] nums, int target) {
        if(nums.length==0){
            return 0;
        }
        int sum = 0;
        int left = 0;
        int right = nums.length - 1;
        while (left != right) {
            int mid = left + (right - left) / 2;
            //排除左部分不包含给定数字的无用部分
            if (nums[mid] >= target) {
                right = mid;
            } else if (nums[mid] < target) {
                left = mid + 1;
            }
        }
        //查找出现次数  排除了没有给定数字的左部分
        while (left < nums.length && nums[left++] == target) {
            sum++;
        }
        return sum;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35416214/article/details/107615125
今日推荐