题意
给n(奇数)个数,定义特殊的数为在序列中出现次数不少于(n+1)/2次的数,找出这个特殊的数
思路
……….
看着这道题我是蒙蔽的
因为太简单了hhhh
我做的也不太一样,一个一个输入然后记录就好了(自认为最简单又好懂)
以后也可以知道一个一个输入的好处hhh不过他们做的好像更666
(设置一标志量num,按照原顺序依次迭代,随便假定一个解,如果a[i]==ans,num++,否则num–,当num为0时将当前a[i]作为新解。因为n为奇数,且特殊值出现次数大于一半,所以任何情况下,特殊值做为解时代num不会小于1,所以最终的解一定就是特殊值。)
代码
#include <cstring>
#include <iostream>
#define N 1000005
using namespace std;
int dp[ N ];
int main () {
int n;
while ( ~scanf ( "%d", &n ) ) {
memset ( dp, 0, sizeof ( dp ) );
int a;
int mx = 0;
while ( n-- ) {
scanf ( "%d", &a );
dp[ a ]++;
if ( dp[ a ] > dp[ mx ] )
mx = a;
}
printf ( "%d\n", mx );
}
return 0;
}