ETH官方钱包

切換
舊版
前往
大廳
主題

ZeroJudge - d587: 參貳壹真好吃 解題心得

Not In My Back Yard | 2018-09-18 21:06:09 | 巴幣 0 | 人氣 304

題目連結(jié):


題目大意:
給定N(N ≦ 1, 000, 000),代表接下來(lái)有N個(gè)數(shù)字。每個(gè)數(shù)字只會(huì)是1、2或3。

把給定的N個(gè)數(shù)字由小排到大輸出。


解題思維:
雖然這題可以直接呼叫內(nèi)建的sort()函式,就可以過(guò)了。

但是現(xiàn)在要介紹一下一個(gè)排序的演算法,叫做——Counting Sort。

顧名思義,用數(shù)的去「排序」。有時(shí)候已知數(shù)字的範(fàn)圍,就可以直接開(kāi)相應(yīng)大小的陣列(當(dāng)然,太大就不適用了),然後出現(xiàn)什麼數(shù)字就把在相應(yīng)陣列位置的值+1(本來(lái)都是0)。

然後在輸入結(jié)束後,用迴圈由小跑到大的數(shù)字(因?yàn)楣?fàn)圍已知)。有曾經(jīng)出現(xiàn)過(guò)的數(shù)字,就輸出相應(yīng)的次數(shù)。

雖然這演算法會(huì)消耗不少記憶體空間,但是在時(shí)間層面確實(shí)是數(shù)一數(shù)二地快(跟資料數(shù)量N和範(fàn)圍M成正比,即時(shí)間複雜度為O(N+M)),並不失為一個(gè)好的排序手段。



此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。

創(chuàng)作回應(yīng)

追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作