原题链接
解题思路
在输入的过程中记录当前数的次数以及上一个数,如果本次输入的数和上次的数一样,当前数次数加1,否则,当前数次数变为1;然后判断一下这个次数是否比全局最大次数大(不是大于等于,因为次数相等的情况下输出小的那个)就更新全局最大。
比较坑的是样例中n有负数的情况,进行特判,如果n<=0直接退出。
源代码
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 0x3fffffff;
int main(){
int n;
scanf("%d",&n);
if(n <= 0){
return 0;
}
int pre = maxn, cur, ctimes = 0;
int x, res = -1;
for(int i=0; i<n; i++){
scanf("%d",&cur);
if(cur != pre){
ctimes = 1;
}
else{
ctimes++;
}
if(ctimes > res){
res = ctimes;
x = cur;
}
pre = cur;
}
printf("%d", x);
return 0;
}