一、簡述
使用資料結構堆,實現查詢陣列中的第k大元素。流程如下:陣列內容堆化(因為是查詢第k大,所以使用大根堆)、依次取出並刪除堆的根節點、將剩餘元素堆化、取到第k個即為目標元素。
二、**實現
#include
#include
using
namespace std;
intfindkth
(vector<
int> a,
int n,
int k)
if(rootelement >= aa[child]
)else
} aa[child /2]
= rootelement;
}int result =0;
for(
int i =
0; i < k; i++)if
(lastelement >= aa[childnode]
)else
} aa[curnode]
= lastelement;
}return result;
}int
main()
;int result =
findkth
(primes,
(int
)primes.
size()
,8);
cout <<
"result = "
<< result << endl;
return0;
}
三、執行結果
result =
34
快速尋找第k大元素
我們先思考排序為什麼可以解決該問題 如果我們隨便選定乙個元素,假想的認為它就是我們要找的第k大元素,我們最終要考察,證明的是這個元素在序列降序排序後到底應該處於哪個位置,如果是在第k位,那自然就是第k大元素。說到這裡似乎漏出了點端倪,是啊,我們這樣證明的話並不需要將序列完整的排序,我們只需要將比這個...
陣列中的第K大元素
第k大元素o n 解法,利用快排 剪枝,直接看 吧 include int k 7 第k大,k 0 int sort int array,int low,int high array low key return low void quicksort int array,int low,int hi...
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 說明 你可以假設 k 總是有效的,且 1...