两种解题方法:
一、因为数组是升序的,所以就从头开始遍历,遍历到那个数大于k为止,思路比较简单,提交也通过了。
二、用二分法,判断数组中间的数,如果正好等于k或者数组已经不可分,则从中间分别向两头找相等的数,同时计数,最后返回总数。如果是大于k,则递归数组的左半部分;小于k,则递归数组的右半部分。
function GetNumberOfK(data, k)
{
/*
let i=0;
let count=0;
while(data[i]<=k){
if(data[i]==k){
count++;
}
i++;
}
return count;
*/
const mid = Math.floor(data.length/2);
if(data[mid] == k || data.length < 2){
let count=0;
let i = mid;
while(i>=0 && data[i] == k){
count++;
i--;
}
i = mid+1;
while(i<data.length && data[i] == k){
count++;
i++;
}
return count;
}
else if(data[mid]<k){
return GetNumberOfK(data.slice(mid+1), k)
}
else if(data[mid]>k){
return GetNumberOfK(data.slice(0,mid), k)
}
}
module.exports = {
GetNumberOfK : GetNumberOfK
};