待手动敲

题目

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

leetcode链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof//

示例 1:

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

输出: 2

示例 2:

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

输出: 0

思路

遍历一遍的方法,可能会超时,否决

看到排序的数组就要想到是分治思维,其实就是找第一个小于target的数,然后再开始遍历,将统计数量的范围缩小

代码

/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
if (!nums.length) return 0
let i = 0
let j = nums.length - 1
let middle = Math.floor((i + j) / 2)
while (i < middle) {
const startNum = nums[i]
const endNum = nums[j]
const middleNum = nums[middle]
if (middleNum < target) {
i = middle
} else {
j = middle - 1
}
middle = Math.floor((i + j) / 2)
}
let count = 0
for (let start = middle; start < nums.length; start++) {
const num = nums[start]
if (num > target) {
break
} else if (num === target) {
count++
}
}
return count
}

————————————————