求一個(gè)數(shù)組中第k大的數(shù) 給定一個(gè)亂序數(shù)組,找到其中第K大的值,要求?
給定一個(gè)亂序數(shù)組,找到其中第K大的值,要求?所謂“第(第一)k個(gè)最大數(shù)問題”是指在長度為n(n>=k)的無序數(shù)組中從大到小尋找第(第一)k個(gè)數(shù)的問題。解決方案1:我們可以先將無序數(shù)組從大到小排序,
給定一個(gè)亂序數(shù)組,找到其中第K大的值,要求?
所謂“第(第一)k個(gè)最大數(shù)問題”是指在長度為n(n>=k)的無序數(shù)組中從大到小尋找第(第一)k個(gè)數(shù)的問題。
解決方案1:我們可以先將無序數(shù)組從大到小排序,然后取出最上面的k,總時(shí)間復(fù)雜度為O(n*logn k)。
解決方案2:使用選擇排序或交互式排序,可在選擇k次后獲得第k個(gè)最大數(shù)??倳r(shí)間復(fù)雜度為O(n*k)
解決方案3:利用快速排序的思想,從數(shù)組s中隨機(jī)找到一個(gè)元素x,將數(shù)組分為SA和sb兩部分。SA中的元素大于或等于x,sb中的元素小于x。在這種情況下,有兩種情況:
1。如果SA中的元素?cái)?shù)小于k,則sb中的k-| SA |元素是第k個(gè)最大數(shù);
2。如果SA中的元素?cái)?shù)大于或等于K,則返回SA中第K個(gè)最大的元素?cái)?shù)。時(shí)間復(fù)雜度約為o(n)
解決方案4:二進(jìn)制[smin,Smax]搜索結(jié)果x,統(tǒng)計(jì)信息x出現(xiàn)在數(shù)組中,整個(gè)數(shù)組中的k-1數(shù)是第k個(gè)最大數(shù)。平均時(shí)間復(fù)雜度為O(n*logn)
解決方案5:使用O(4*n)方法為原始數(shù)量構(gòu)建最大堆,然后彈出K次。時(shí)間復(fù)雜度為O(4*n,K*logn)
解決方案6:保持最小堆大小為K。對(duì)于數(shù)組中的每個(gè)元素,判斷堆頂?shù)拇笮 H绻秧敽艽?,則無所謂。否則,彈出堆頂并將當(dāng)前值插入堆中。時(shí)間復(fù)雜度O(n*logK)
解決方案7:用哈希法保存數(shù)組中元素Si的出現(xiàn)次數(shù),利用計(jì)數(shù)和排序的思想,在由大到小的線性掃描過程中,前面有k-1的數(shù)字是第k個(gè)最大數(shù),平均時(shí)間復(fù)雜度O(n)
如何在兩個(gè)已排序數(shù)組的結(jié)合找到第k大元素嗎?
您創(chuàng)建了一個(gè)變量m,并使用它來保存第二大元素,使用max來保存最重要的元素。從max=M=0開始,然后將max與每個(gè)元素進(jìn)行比較。如果元素為>maxmax=element M=max,如果元素小于max,則將M與元素進(jìn)行比較。如果M<,element M=element,則循環(huán)比較正常