215 陣列中的第K個最大元素 最小堆實現s

2021-10-25 21:45:02 字數 843 閱讀 9091

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。

思路:

其實這個題使用快速排序肯定是可以的,但是因為堆排序在面試中是重點,所以我這一次就重點學習了一下堆排序。

堆排序的的重要思想就是:

形成的時候上移

插入的時候下推

這個題目使用最小堆,巧妙之處就在於,先形成乙個k容量的最小堆,然後將k-length-1的數進行比較,如果大於堆頂就假如到堆中。

這樣保證了什麼呢?當然是到遍歷完成後堆頂就是第k大啦,為啥呢,最小堆下面的可都比堆頂大啊,懂了嘛?嘿嘿(●ˇ∀ˇ●)

class

solution

//遍歷剩下的數

for(

int i=k;i)return nums[0]

;}public

void

heapify

(int

heap,

int index,

int k)

//在判斷右

if(index*2+

22])//沒有交換過 ,代表頂點就是最小的,不用管了,直接退出break

if(index==temp)

break

;swap

(heap,index,temp)

; index=temp;}}

public

void

swap

(int

heap,

int a,

int b)

}

215 陣列中的第K個最大元素

題目 方法一 二 時間複雜度 o n logk 向大小為k的堆中新增元素的時間複雜度為o logk 我們將重複該操作n次 空間複雜度 o k 用於儲存k個堆元素 自己解答 速度太慢?有待提高 time 2019 10 9 下午01 04 file 陣列中第k大元素 215.py 在未排序的陣列中找到...

215 陣列中的第K個最大元素

思路1 快排 考慮先使用快排實現,練習快排。時間複雜度o n 如果我們把每次分割槽遍歷的元素個數加起來,就是 n n 2 n 4 n 8 1。這是乙個等比數列求和,最後的和等於 2n 1。所以,時間複雜度就為 o n 因為一次快排可以實現乙個數歸位,比較index和n k的大小 如果index n ...

215 陣列中的第K個最大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。輸入 3,2,1,5,6,4 和 k 2 輸出 5 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 你可以假設 k 總是有效的,且 1 k 陣列的長度。思路和演...