尋找第k大元素的若干解答

原文見(jiàn):https://mp.weixin.qq.com/s/g4Y6ES4eL9cKJKkSpGZFYg

順序統(tǒng)計(jì)之第K大元素

問(wèn)題

Given an array and a number k where k is smaller than size of array, we need to find the k’th smallest element in the given array. It is given that ll array elements are distinct.

解法

對(duì)數(shù)據(jù)進(jìn)行排序

時(shí)間復(fù)雜度:O(N Log N)

借助一個(gè)大小為N的最大堆,然后extractMax k次

時(shí)間復(fù)雜度:O(kLogN)

借助一個(gè)大小為K的最小堆

時(shí)間復(fù)雜度:O(NLogK)

空間復(fù)雜度:O(K)

利用快排的partition函數(shù),將數(shù)組分為兩部分,大小分別為i以及n-i(假設(shè)i>k) ;問(wèn)題轉(zhuǎn)換為數(shù)組arr[0, i]中取第K-i大元素

時(shí)間復(fù)雜度:平均 O(N);最壞O(N^2)

隨機(jī)版本的quickSelect

時(shí)間復(fù)雜度:期望O(N) 最壞依舊是O(N^2)

每5個(gè)為一組,并取其中位數(shù);然后在中位數(shù)中取出pivot;

時(shí)間復(fù)雜度:最壞O(N)

總結(jié)

快排思想很重要

快排partition函數(shù)的優(yōu)化思想更重要(隨機(jī)化,分組取中法)

TopK問(wèn)題的經(jīng)典解法可以靠堆來(lái)解決

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 排序(下):如何用開(kāi)排思想在O(n)內(nèi)查找第K大元素 上一節(jié)我講了冒泡排序、插入排序、選擇排序這三種排序算法,它們...
    GhostintheCode閱讀 905評(píng)論 0 0
  • 排序算法說(shuō)明 (1)排序的定義:對(duì)一序列對(duì)象根據(jù)某個(gè)關(guān)鍵字進(jìn)行排序; 輸入:n個(gè)數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 757評(píng)論 0 0
  • <center>#51 N-Queens</center> link Description:The n-quee...
    鐺鐺鐺clark閱讀 1,125評(píng)論 0 0
  • 閱歷部分:在一個(gè)生命力處在很弱的心理咨詢室工作,給了我很多的空閑時(shí)間和精力,可以盡情地享受放飛思維的過(guò)程,選擇我想...
    wang毓君閱讀 191評(píng)論 0 0
  • 以下是英語(yǔ)考試時(shí)真實(shí)發(fā)生的__(:з」∠)_ 你們有考場(chǎng)睡著過(guò)嗎?hin hin hin~~~
    那里面閱讀 289評(píng)論 0 1

友情鏈接更多精彩內(nèi)容