stl水过
值得一提的是这道题规定大于等于一般,所以有种更好的方法,就是加减,结果的值一定大于等于0;
#include <iostream>
#include <map>
using namespace std;
int main(){
map<int ,int> hash;
int n,tmp;
while(~scanf("%d",&n)){
hash.clear();
for(int i=0; i<n; ++i){
scanf("%d",&tmp);
++hash[tmp];
}
map<int,int>::iterator it;
for(it=hash.begin(); it!=hash.end(); ++it){
if(it->second>=(n+1)/2){
cout<<it->first<<endl;
break;
}
}
}
}
好方法:
#include<iostream>
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;
}