剑指 Offer 53 - I. 在排序数组中查找数字 I(二分法)

286 阅读1分钟

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

示例 1:

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

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

限制:

0 <= 数组长度 <= 50000

image.png

解题思路

  1. 先用二分法查找出其中一个目标元素
  2. 再向目标元素两边查找目标元素

代码

class Solution {
    public int search(int[] nums, int target) {

        int l = 0, r = nums.length - 1;
        while (l <= r) {
            int mid = (r - l) / 2 + l;
            if (nums[mid] == target) {
                int left = mid-1, right = mid+1;
                while (left >= 0 && nums[left] == target)
                    left--;
                while (right < nums.length && nums[right] == target)
                    right++;
                return right - left - 1;
            } else if (nums[mid] > target)
                r = mid - 1;
            else l = mid + 1;
        }
        return 0;

    }
}