题目:在排序数组中,找出给定元素出现的次数。
例如:有序数组[1,2,3, 4, 5, 5, 5, 5,6,7,8]中,5出现的次数为4次。
C程序实现:
1.直接比较统计,O(N)的时间复杂度。
int findCount(int a[],int len ,int key)
{
int i,count = 0;
for(i=0;i<len;i++)
{
if(key==a[i])
count++;
}
return count;
}
2.利用二分查找,分别找出最先出现和最后出现的位置,再统计出现的次数即可,时间复杂度为O(logN)。
int BinarySort(int a[],int len, int key, bool isLeft)
{
int left = 0, right = len -1;
int last = 0 ; // 记录下标
while(left<=right)
{
int mid = (left + right)/2;
if(a[mid]<key)
{
left = mid + 1;
}
else if(a[mid]>key)
{
right = mid -1;
}
else
{
last = mid ;
if(isLeft) // 该值在mid左边还有时
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
}
// if (last>0)
// return last;
// else
// return -1;
return last>0?last:-1;
}