寻找整型数组中出现次数最多的数

2015-08-09  本文已影响372人  爱你会吃醋

1.先排序,然后再遍历,寻找出现次数最多的数

void f1(int *num,int length)
{

quickSort(num,0,length-1);
int max=0;//最大出现次数
int cur=1;//当前出现次数
int max_num=num[0];//出现次数最多的数字

//开始遍历查找出现次数最多的数字
for(int i=0;i<length-1;i++)
{
    if(num[i]==num[i+1])
    {
        cur++;
    }
    else
    {
        if(cur>max)
        {
            max=cur;
            max_num=num[i];
        }
        cur=1;
    }
    
}
cout<<"出现次数最多的数字是:"<<max_num<<",共出现了"<<max<<"次";
}

我们用max_num表示出现次数最多的数字,用max表示最大出现次数,用cur_max表示当前数字的出现次数,在遍历中逐步更新max的值,从而得到结果。

但是,如果有多个数字出现次数相同(且为最大出现次数),这时要想全部输出怎么办呢?

2.利用map

void f2(int *num,int length)
{
//key表示数字,value记载数字出现次数
map<int,int> map_int;
for(int i=0;i<length;i++)
{
    //map_int[num[i]]指key为num[i]对应的值,如果不存在这个键,那么会创建键,并初始化值(int初始化为0)
    //++表示次数加1
    ++map_int[num[i]];
}
int value=(map_int.begin())->first;//表示数字
int max=(map_int.begin())->second;//表示出现次数
for(map<int,int>::iterator iter=map_int.begin(); iter!=map_int.end() ; iter++)
{
    if(iter->second > max)//找到了出现次数更多的值
    {
        value=iter->first;
        max=iter->second;
    }
}
cout<<"出现次数最多的数字是:"<<value<<",共出现了"<<max<<"次";
}
上一篇 下一篇

猜你喜欢

热点阅读