#include <stdio.h>
int findN(int arr[], int n, int len)
{
int left, right, mid, i, res;
// first find n
left = 0;
right = len - 1;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] == n)
break;
else if (arr[mid] < n)
left = mid + 1;
else
right = mid - 1;
}
if (left > right)
return -1;
res = 0;
for (i = left; i <= right; i++)
{
if (arr[i] == n)
res++;
}
return res;
}
int main()
{
int arr[] = {1,2,2,3,3,3,3,4};
int len = sizeof(arr) / sizeof(arr[0]);
int n = 1;
int res = findN(arr, n, len);
printf("The value of %d appear %d times.\n", n, res);
return 0;
}
ps:这是一位学长的思路和代码
|
常规思路: 1. 二分法找到n,此时[left, right]之间必然包含了所有的n 2. 遍历[left, right]中n出现的次数 |
本文介绍了一种使用二分查找定位特定元素,并通过遍历查找区间来计算该元素出现次数的方法。首先利用二分查找法找到目标元素所在的位置范围,然后在此范围内统计目标元素的具体出现次数。
1万+

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



