java選擇排序 一道java面試題,20億數(shù)字的文本排序,如何取前100?
一道java面試題,20億數(shù)字的文本排序,如何取前100?因為這是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最
一道java面試題,20億數(shù)字的文本排序,如何取前100?
因為這是一個Java問題,所以這是典型的TOPK問題。首先取前100個數(shù)字構(gòu)建一個最小堆,然后依次從堆的頂部插入剩余的數(shù)字,同時調(diào)整堆。堆中最后100個元素就是結(jié)果。空間復雜度是k,時間復雜度是nlogk
我們知道集合是無序的,我們可以使用TreeSet類。樹集排序的規(guī)則是什么?1treeset支持兩種排序方法:自然排序和自定義排序。默認情況下,TreeSet采用自然排序。自然排序:TreeSet調(diào)用CompareTo(o)of set elements objectj)方法來比較元素之間的大小關(guān)系,然后按升序排列集合中的元素。這種方法是自然分類。為什么collection元素有CompareTo方法?因為collection元素對象實現(xiàn)了comparable接口,所以這個方法返回一個整數(shù)值。當一個對象調(diào)用此方法與另一個對象進行比較時,例如:obb1。CompareTo(obb2),如返回0,則兩個對象相等。如果該方法返回正整數(shù),則obji1大于obji2。如果該方法返回負整數(shù),則obji1小于obji2。因此,應(yīng)使用樹集集合進行自然排序。元素必須實現(xiàn)可比較的接口。但是,一些常見的Java類實現(xiàn)了這個接口,比如stringcharacterboolean datetimebigdeci Malbiginteger,比如:TreeSet<string>Ts=newtreeset<string>()ts.添加(“b”)ts.添加(“c”)ts.添加(“a”)系統(tǒng)輸出打?。═S)結(jié)果:ABC