分析题目:数组是已排序好的,找出给定数字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)
{

本文探讨了如何在已排序的数组中利用二分查找算法找到给定数字出现的次数。首先介绍了遍历数组的直接方法,然后详细阐述了使用二分查找法,其时间复杂度降低到O(logN)。文中提到了二分查找的递归实现,并特别指出在查找过程中如何确定最左边和最右边的关键位置。此外,还提及了二分查找在寻找有序数组中大于或大于等于特定值的第一个元素的应用。
最低0.47元/天 解锁文章
680

被折叠的 条评论
为什么被折叠?



