#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,k,n,t;
while(~scanf("%d",&n)){
int count=0;
for(i=0;i<=n-1;i++){
scanf("%d",&k);
if(count==0){
count++;
t=k;
}
else
{
if(k==t)count++;
else count--;
}
}
printf("%d\n",t);
}
return 0;
}
这道题用的方法很巧妙,因为题目要求找到出现次数大于等于(n+1)/2次的,所以设一个count,当count等于零时碰到一个数字就加1,并设置一个t来记录这个数字;不等于零就要将该数字与t比较,如果相等就加一,不相等就减一,当count再次等于零时就要更换t。。。一直这样做直到循环结束
如果某一数字k出现次数大于等于(n+1)/2,那么因为k>n-k,所以t最后一定会等于k