一个数组中有N个元素,找出其中重复次数最多的那个元素?
一个数组中有N个元素,找出其中重复次数最多的那个元素?假设没有重复次数相同的两个不同元素,例如{1,1,2,2,4,4,4,4,5,5,6,6,6},就是要找出4,还请各位大虾多多帮忙。
另外,数组中的元素是任意顺序的,也就是没有经过排序的,如果这样难以实现的话,可以先实现已经排序了的,就像我举出的例子那样
[解决办法]
#include <stdlib.h>
#include <stdio.h>
#define M 100// 当前用于统计的数字数目
int nSeed[M] = {};// 存储用来进行统计的数组
int nMaxNum = 0;// 存储当前出现次数最多的那个数字
int nRepetitionCount = 0;// 出现次数最多的数字的重复次数
int nCount = 0;// 辅助计数
int main(void)
{
// 随机赋值
for (int i = 0; i < M; i++)
{
nSeed[i] = rand() % 25;
}
// 先检查0的情况,0作为一个特殊数字来作标记
nMaxNum = 0;
for (int i = 0; i < M; i++)
{
if ( !nSeed[i])
{
nRepetitionCount++;
}
}
// 从后面往前面查
for (int i = M - 1; i > nRepetitionCount; i--)
{
// 0则过,已统计过
if ( !nSeed[i])
{
continue;
}
// 找到一个新数字,进行统计
nCount = 1;
for (int j = i - 1; j > 0; j--)
{
if (nSeed[j] == nSeed[i])
{
nCount++;
nSeed[j] = 0;// 置为0,表示已统计过
}
}
// 判断当前是否为最大
if (nCount > nRepetitionCount)
{
nMaxNum = nSeed[i];
nRepetitionCount = nCount;
}
}
printf( "出现次数最多的数是%d,出现%d次!\n ", nMaxNum, nRepetitionCount);
getchar();
return 0;
};
/////////////////////////////////////////////////
我试着写了一个,你看看效率如何?这个算法改变了原数组中的数字。