【BZOJ2456】【雜題】mode 題解

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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章