1. 程式人生 > >BZOJ2456 mode 【眾數】

BZOJ2456 mode 【眾數】

整數 php sed 兩個 http span ont 一個 pen

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。

題解:

由於內存不足,被迫解鎖了一種新的求眾數的方法:抵消法,復雜度 n 。

由於眾數的個數 >= n div 2,所以我們把兩個不同的數抵消,不同的數疊加,最後剩下的一定是眾數(學到了技術分享圖片

二話不說上代碼:

技術分享圖片
 1 #include<cstdio>
 2 int n,x,y,num;
 3 int main()
 4 {
 5     scanf("%d",&n);
 6     while (n--)
 7     {
 8         scanf("%d",&y);
 9         if (!num) num++,x=y;
10         else {
11             if (y!=x) num--;
12             else num++;
13         }
14     }
15     printf("
%d",x); 16 }
View Code

加油加油加油!!! fighting fighting fighting !!!

BZOJ2456 mode 【眾數】