小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

一道看上去很嚇人的算法面試題:如何對n個數(shù)進(jìn)行排序,要求時間復(fù)雜度O(n),空間復(fù)雜度O(1)

 java_laq小館 2013-08-07

一道看上去很嚇人的算法面試題:如何對n個數(shù)進(jìn)行排序,要求時間復(fù)雜度O(n),空間復(fù)雜度O(1)

分類: ACM和算法 6629人閱讀 評論(13) 收藏 舉報
看上去似乎任何已知的算法都無法做到,如果誰做到了,那么所有的排序方 法:QuickSort,ShellSort,HeapSort,BubbleSort等等等等,都可以扔掉了,還要這些算法干嗎阿,呵呵。不過實際上, 在數(shù)字范圍有限制的情況下,是有一個這樣的算法的,只需要用一個數(shù)組記錄每個數(shù)字出現(xiàn)次數(shù)就可以了。
假定你的數(shù)字范圍在0到65535范圍之內(nèi),定義一個數(shù)組count[65536](這個空間是常量,和n無關(guān),所以是O(1) ),初值全部為0。
那么假設(shè)有下面這些數(shù)字:
100
200
300
119
0
6
...
那么對于每個這個數(shù)字,都做在count中記錄一下:
100 => count[100]++
200 => count[200]++
300 => count[300]++
119 => count[119]++
0 => count[0]++
6 => count[6]++
...
最后,遍歷一邊所有這些數(shù)字就可得到0~65535每個數(shù)字的個數(shù)(在count數(shù)組中),然后再順序遍歷count數(shù)組,count[n] = m,則輸出m個n,(比如說有count[3] = 2, 那么說明有2個數(shù)字3),依次輸出,最后可得結(jié)果。第一次遍歷是O(n),第二次遍歷是O(1),為常量,所以最后的時間復(fù)雜度為O(n),而空間復(fù)雜度 為O(1)
這個算法很簡單,相信大家都會,只是這個題太過于變態(tài)了,一般會把面試者嚇?。ㄎ以瓉砻嬖囈渤鲞^這個題,只不過題目的表述形式要“友善”的多,呵呵)

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多