分析题目:数组是已排序好的,找出给定数字key出现的次数,
方法1、最直观的方法就是遍历一遍数组,时间复杂度O(N)
方法2、可以借助二分查找,时间复杂度为O(logN)
找出最左边出现的key出现的位置,找出最右边key出现的位置。
size_t getLow(int *array,int size, int k)
{
size_t left = 0;
size_t right = size - 1;
while (left < right)
{
int mid = (left + right) / 2;
if (array[mid] >= k)
right = mid;
else
left = mid + 1;
}
return left;
}
size_t getRight(int *array, int size, int k)
{
size_t left = 0;
size_t right = size - 1;
while (left < right)
{