两种解题方法: 一、因为数组是升序的,所以就从头开始遍历,遍历到那个数大于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 };