题目
-
统计一个数字在排序数组中出现的次数。
-
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
while (i <= j) {
middle = Math.floor((i + j) / 2)
const middleNum = nums[middle]
if (middleNum === target) {
break
} else if (middleNum < target) {
i = middle + 1
} else {
j = middle - 1
}
}
let count = 0
for (let i = middle; i < nums.length; i++) {
if (nums[i] === target) count++
}
for (let i = middle - 1; i >= 0; i--) {
if (nums[i] === target) count++
}
return count
}