mode(思維,注意記憶體)

2021-09-09 01:39:29 字數 1106 閱讀 1334

mode

submit

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。

題解:注意這個題,對記憶體要求非常高1024k,1kb等於1024位元組,如果想用陣列的話,至少要500000*4/1024大概要2000k,還不算原本程式什麼的佔的記憶體;原來我還想著用map記錄的,因為想到資料不超過int也呆1e9多,那肯定報記憶體,現在想想map也會爆記憶體,怎麼辦吶,我們只有用數字代替了,因為數字出現的個數會是n的一半還多,那麼我們只需要每一步,如果跟上乙個相等就++不想等就等於當前,因為ans必然會出現n的一半還多,所以不愁得不到答案了;

**:

/*

#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

mapmp;

int main()

puts(ans);

}return 0;}*/

#include

#include

/*int cmp(const void *a,const void *b)

int a[500005];

int main()

}if(cur>n/2)ans=a[n-1];

printf("%d\n",ans);

}return 0;}*/

intn,ans,cur,num;

intmain()}}

printf(

"%d\n

",ans);

}return0;

}

BZOJ 2456 mode 思維 卡記憶體

傳送門 題意 就是找出n個數中出現了超過ceil n 2 的那個數.思維 其實一看是乙個很簡單的題目,但是我們可以注意到它的記憶體只有1m,變數定義多了都會mle,更不要說開陣列之類的,所以我們必須在o n 的時復,和o 1 的空復之內解決這個問題.所以就有乙個想法就是碰碰法,因為最後我們求的那個數...

bzoj 2456 mode 思維題 好題

題目描述 給你乙個 n 個數的數列,其中某個數出現了超過 n div 2 次即眾數,請你找出那個數。空間大小 1mb 題解 顯然,我們是不能開任何陣列的,此題專卡空間。然而我們要求的東西也十分簡單,就是出現次數最多的數。出現次數最多,即代表著序列中沒有數比答案數更多。想象一下如果眾數和其他的數字一一...

bzoj 2456 mode 思維題 好題

題目描述 給你乙個 n 個數的數列,其中某個數出現了超過 n div 2 次即眾數,請你找出那個數。空間大小 1mb 題解 顯然,我們是不能開任何陣列的,此題專卡空間。然而我們要求的東西也十分簡單,就是出現次數最多的數。出現次數最多,即代表著序列中沒有數比答案數更多。想象一下如果眾數和其他的數字一一...