Description
給你一個n個數的數列,其中某個數出現了超過n div 2次即衆數,請你找出那個數。
Input
第1行一個正整數n。
第2行n個正整數用空格隔開。
Output
一行一個正整數表示那個衆數。
Sample Input
5
3 2 3 1 3
Sample Output
3
HINT
100%的數據,n<=500000,數列中每個數<=maxlongint。
卡內存,解法很簡單,就是將不同的數抵消,證明也很簡單,因爲保證有一個數大於一般,所以最壞情況就是和其他所有數抵消然後還是會剩一個。還有就是不要開namespace。
#include <cstdio>
int n,a,b,c;
int main() {
scanf("%d",&n);
while(n--) {
scanf("%d",&a);
if(a != b)
if(c) c--;
else c++, b = a;
else c++;
}
printf("%d",b);
return 0;
}