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

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

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

限制:0 <= 数组长度 <= 50000

二分查找

  1. 首先想到两遍二分查找
  2. 但是,二分查找的函数其实不用写两个
  3. 我们只要改一下target就行了
  • 由于有重复的元素,我们使用 < 的找边界的办法
  • 找边界,用<,所以right = nums.length
  • 区间是左闭右开区间
  1. const search = function (nums, target) {
  2. return helper(nums, target) - helper(nums, target - 1);
  3. };
  4. // 找区间的用这种 <
  5. // 找一个下标的用 <=
  6. function helper(nums, target) {
  7. let left = 0, right = nums.length;
  8. while (left < right) {
  9. const mid = left + ((right - left ) >> 1);
  10. // 收缩左边界
  11. if (nums[mid] == target) {
  12. left = mid + 1;
  13. }
  14. else if (nums[mid] < target) {
  15. left = mid + 1;
  16. }
  17. else if (nums[mid] > target) {
  18. right = mid;
  19. }
  20. }
  21. return left;
  22. }