在排序数组中,找出给定数字的出现次数 比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。

时间:2020-12-26 11:05:28

在排序数组中,找出给定数字的出现次数

比如 [1, 2, 2, 2, 3] 中2的出现次数是3次。

乍一看,挺简单的,遍历一遍就搞定了。但是在细想一下,要是数组时乱序的还好,但是这边人家数组都给排序好了,要是再用直接遍历的方法,估计情况不会很乐观,为了获得更好的时间效率,我们可以考虑折半查找。

PS:可能看我博客的会发现,我目前写的一些东西都很稀疏平常的,确实,笔者实力还很烂,只能挑一些小虾米做,以后升级了会增加难度的。

如有错误,还希望各位道友批评指正,万分感谢。

环境 win8,vs2012

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define LENGTH 6

/*
int getCount( int arr[] ,int num, int n)
{
int count=0;
for(int i=0;i<n;i++)
{
if(arr[i]==num)
{
count++;
}
}
return count;
}
*/

int count=0;

void getCount( int arr[], int num , int begin, int end)
{
if(begin>end)
{
return ;
}

int middle=(begin+end)/2;

if(arr[middle]==num)
{
count++;
getCount(arr, num ,begin , middle-1);
getCount(arr, num ,middle+1 , end);
}
else if( arr[middle] <num)
{
getCount(arr, num, middle+1, end);
}
else
{
getCount(arr, num , begin, middle-1);
}
}

int main()
{
int arr[LENGTH]={1,2,2,2,3,4};

//printf("count = %d \n",getCount( arr, 2, LENGTH));
getCount(arr,2,0 ,LENGTH-1);
printf("count = %d\n",count);
getchar();
return 0;
}