题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1004
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main(int argc, char *argv[])
{
int nCount=0;
string strTmp;
while(cin>>nCount&&nCount!=0)
{
map<string,int> mapColor;//用map容器非常方便
for(int i=0;i<nCount;++i)
{
cin>>strTmp;
mapColor[strTmp]++;
}
map<string, int>::iterator iter;
int max = -1;
for(iter = mapColor.begin(); iter != mapColor.end(); iter++)
{//第一次遍历标记最大次数所在位置
if(iter->second>max)
{
max = iter->second;
}
}
for(iter = mapColor.begin(); iter != mapColor.end(); iter++)
{//第二次遍历找到标记的位置
if(iter->second==max)
{
cout<<iter->first<<endl;
}
}
}
return 0;
}
由于map只能对关键字进行排序,所以这里放弃考虑排序了,直接两次遍历map容器,算法复杂度O(n)
本文转自Phinecos(洞庭散人)博客园博客,原文链接http://www.cnblogs.com/phinecos/archive/2007/12/23/1011501.html,如需转载请自行联系原作者