题目描述
统计一个数字在排序数组中出现的次数。
代码
思路1:暴力解决方法,遍历
function GetNumberOfK(data, k)
{
// write code here
var count=0;
data.forEach(function(a){
if(a==k) count++;
if(a>k) return count;
})
return count
}
思路2:二分查找方法:先看中间元素与k相比,小于则在左半部分,大于则在右半部分,
function GetNumberOfK(data, k)
{
// write code here
var l = 0,r = data.length,mid;
while(l < r){
mid = Math.floor((l+r)/2);
if(data[mid] < k ){
while(data[mid] == data[mid+1]){
mid++;
}
l = ++mid;
}else if(data[mid] > k){
while(data[mid] == data[mid-1]){
mid--;
}
r = --mid;
}else{
var sign1 = mid,sign2 = mid;
while(sign1 <= r && data[sign1] == data[sign1+1]){
sign1++;
}
while(sign2 >= l && data[sign2] == data[sign2-1]){
sign2--;
}
return sign1-sign2+1;
}
}
return 0;
}