Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
题意:
查找未排序数组中的第k个最大元素。 请注意,它是排序顺序中的第k个最大元素,而不是第k个不同的元素。
思路:
题意要理解:第k大的元素时从最大边开始数起,最大的为第一大,次大的为第二大。。。。
378题的第k小的元素时从最小边开始数起,最小的为第一小,次小的为第二小。。。
方法一:
利用优先队列做,也就是建立最小堆(或者最大堆)来求第k大的元素。priority_queue容器详解 。
1 | class Solution { |
方法二:
直接利用c++的STL库nth_element。nth_element函数详解 。
1 | class Solution { |
方法三:
利用QuickSelect的方法实现方法二的查找第k个元素的方法,快速查找的思想和快排相同,快排具体详解见快排实现。
1 | class Solution { |