题目描述
解题思路
方法1:循环法
方法2: 二分法
注意:题目中说数组nums
是排序数组
感谢大佬提供的思路:剑指Offer——在排序数组中查找数字I(JS实现)
代码实现
方法1:循环法
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
if (!nums.includes(target)) return 0
let m = new Map();
for (let i of nums) {
if (!m.has(i)) {
m.set(i,1);
} else {
let count = m.get(i);
m.set(i, count+1);
};
};
return m.get(target);
};
方法2:二分法
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
if (!nums.includes(target) || !nums.length) return 0;
let left = 0, right = nums.length - 1;
let mid = Math.floor((left + right) / 2);
while (nums[mid] !== target) {
if (left === right) return 0;
if (nums[mid] < target) {
left = mid + 1;
if (left === nums.length) return 0;
mid = Math.floor((left + right) / 2);
continue;
}
if (nums[mid] > target) {
right = mid - 1;
if (right < 0) return 0;
mid = Math.floor((left + right) / 2);
continue;
}
}
let flag1 = mid;
let flag2 = mid;
let left_border,right_border;
while (nums[flag1-1] === target) {
flag1--;
}
left_border = flag1;
while (nums[flag2+1] === target) {
flag2++;
}
right_border = flag2;
return right_border - left_border + 1;
};