题目
难度:⭐️⭐️
统计一个数字在排序数组中出现的次数。
示例
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
限制:
0 <= nums.length <= 105
-109 <= nums[i] <= 109
nums 是一个非递减数组
-109 <= target <= 109
题解
// 方法一
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let map = new Map()
for(let num of nums){
if(num===target){
map.has(num) ? map.set(num, map.get(num)+1) : map.set(num, 1)
}
}
return map.get(target) ? map.get(target) : 0
};
// 方法二
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let ans = 0
const leftIdx = binarySearch(nums, target, true)
const rightIdx = binarySearch(nums, target, false) - 1
if(leftIdx <= rightIdx && rightIdx < nums.length && nums[leftIdx] === target && nums[rightIdx] === target){
ans = rightIdx-leftIdx+1
}
return ans
};
const binarySearch = (nums, target, lower)=>{
let left = 0
let right = nums.length-1
let ans = nums.length
while(left<=right){
const mid = Math.floor((right+left)/2)
if (nums[mid] > target || (lower && nums[mid] >= target)) {
right = mid - 1;
ans = mid;
} else {
left = mid + 1;
}
}
return ans
}
笔记
因为数组有序,建议通过二分查找解决问题