找数组中出现次数最多的数字
先排序(排序完,相同的数字就在一块了),然后统计次数
时间复杂度:O(nlogn)
空间复杂度:O(1)
排序是底线!!!
//找数组中出现次数最多的数字
//排序,然后统计
int Cmp_int(const void *vp1,const void *vp2)
{
return *(int *)vp1-*(int *)vp2;
}
int Times(int *arr,int len)//O(nlogn),O(1)
{
qsort(arr,len,sizeof(int),Cmp_int);//利用库函数 快速排序 O(nlogn)
int curval;//当前值
int cur = 0;//当前次数
int maxval;//次数最多的值
int max = 0;//最多次数
//Show(arr,len);
curval = arr[0];
for(int i=1;i<len;i++)//找到次数最多的值
{
if(curval == arr[i])
{
cur++;
}
else
{
if(cur > max)
{
maxval = curval;
max = cur;
}
curval = arr[i];
cur = 1;
}
}
printf("出现最多的次数=%d\n",max);
return maxval;
}