在未排序的陣列中找到第 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 ≤ 陣列的長度。
思路和演算法
我們也可以使用堆排序來解決這個問題——建立乙個大根堆,做 k - 1k−1 次刪除操作後堆頂元素就是我們要找的答案。在很多語言中,都有優先佇列或者堆的的容器可以直接使用,但是在面試中,面試官更傾向於讓更面試者自己實現乙個堆。所以建議讀者掌握這裡大根堆的實現方法,在這道題中尤其要搞懂「建堆」、「調整」和「刪除」的過程。
class solution
if (r < heapsize && a[r] > a[largest])
if (largest != i)
}void buildmaxheap(vector& a, int heapsize)
}int findkthlargest(vector& nums, int k)
return nums[0];
}};
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 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 首先明白一點,題目要求返回第n個最大的元...