1,最自然的想法,使用map记录每个词出现的次数
#include<stdio.h>
#include<iostream>
#include<map>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=-1)
{
map<int,int> m;
int i;
int lim=(n+1)/2;
for(i=0;i<n;i++)
{
int temp;
scanf("%d",&temp);
m[temp]++;
}
map<int,int>::iterator iter;
for(iter=m.begin();iter != m.end();iter++)
{
if(iter->second>=lim)
{
printf("%d\n",iter->first);
break;
}
}
}
return 0;
}
2. 使用哈希,缺点是如果输入为负数处理不了
#include<stdio.h>
int hash[100000];
int main()
{
int n,i,t;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<100000;i++)hash[i]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&t);
hash[t]++;
}
for(i=1;;i++)
if(hash[i]>=(n+2)/2)
{
printf("%d\n",i);
break;
}
}
}
#include<stdio.h>
int main()
{
int i,n,num,currnum,ans;
while(scanf("%d",&n)!=EOF)
{
scanf("%d",&num);
currnum = num;
ans = 1;
for(i = 1 ; i < n; i ++)
{
scanf("%d",&num);
if(ans == 0)
currnum = num,ans ++;
else if(num != currnum)
{
ans --;
}
else if (num == currnum)
ans ++;
}
printf("%d\n",currnum);
}
return 0;
}