在陣列中找出第 K 大的數字
題目
在陣列中找出第 K 大的數字。
Find Kth largest number in an array.
說明
找第 K 大的數字,我們可以直覺的用排序後就可以找出來,時間複雜度取決於排序演算法,例如使用快速排序法為 O(n log n)。
另外一個方法是延續前一個題目的想法,找第 K 大就用 K 個變數去保存?不過由於 K 也是個變數,所以我們需利用動態的資料結構來保存,這個 Case 使用 Linked List 是最合適。時間複雜度則為 O(n K),而當 K 很小的時候可以接近 O(n)的效能,反之,K 很大的時候,可能會比直接用快速排序法還慢。
解法
1 | static int Find(int[] array, int k) |
其實會發現這個做法和插入排序法 (Insertion Sort)有點類似,只是插入排序法的 K = n。
延伸閱讀
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 小殘的程式光廊!
Comment