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 題解 顯然,我們是不能開任何陣列的,此題專卡空間。然而我們要求的東西也十分簡單,就是出現次數最多的數。出現次數最多,即代表著序列中沒有數比答案數更多。想象一下如果眾數和其他的數字一一...