選擇性問題 求第K個最大元素

2021-08-20 07:37:36 字數 307 閱讀 6388

假設共有n個數,求出第k個最大元素。

建立乙個長度為n的陣列,然後進行排序,根據下標選擇元素。o(n^2) / o(nlogn)

建立乙個長度為k的陣列,以遞減順序排列。然後對於剩下的n-k個元素,如果元素的值小於陣列中最小元素的值,直接進行忽略;否則根據大小進行插入排序。等插入完成後,陣列最後乙個 元素即為所求元素。 最壞情況:o(n^2),一般情況:o(k*n)

將n個元素建立大根堆,然後進行k-1次刪除根結點後,得到的根結點就是第k大的元素。

依照1)和2),可以只建立k個元素的堆,然後根據元素大小進行修改。

摘自他人

求第 K 大元素

問題 給定乙個長度為 n 的陣列,求第 k 大元素。普通的 o n 隨機分治應該廣為人知,這裡介紹一種確定性的 o n 做法。我們考慮分治,每五個元素一組,我們 o 1 求出每組五個元素的中位數,隨後我們遞迴呼叫該做法,求出每一組中位數的中位數,記為 x 然後我們 o n 掃瞄求出 x 的排名,我們...

陣列的第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 說明 你可以假設 k 總是有效...

Partition演算法 求第K大元素

二分partition演算法是指在o n 的時間複雜度和o 1 的空間複雜度的情況下將乙個陣列分為大於某個數和小於某個數的兩部分。快速排序其實就是分治 partition演算法。int partition vector int nums,int begin,int end swap nums pos...