Description:
Find K-th largest element in an array.
Note:
用了heapSort的思想。需要注意的是调用vector的size()函数返回的是unsigned int类型,当为负时会越界,所以要转换为int类型。
class Solution {
public:
/*
* param k : description of k
* param nums : description of array and index 0 ~ n-1
* return: description of return
*/
void maxify(vector<int>& num, int parent ,int end) {
int leftchild = (parent + 1) * 2 - 1;
int rightchild = (parent + 1) * 2;
int maxChild;
if (leftchild > end)
return;
if (rightchild > end || num[leftchild] > num[rightchild])
maxChild = leftchild;
else
maxChild = rightchild;
if (num[parent] < num[maxChild]) {
swap(num[parent], num[maxChild]);
maxify(num, maxChild,end);
}
}
void buildHeap(vector<int>& num) {
int numsize = num.size();
int i = numsize / 2;
for (; i >= 0; i--) {
maxify(num, i, numsize - 1);
}
}
public:
int kthLargestElement(int k, vector<int> nums) {
// write your code here
buildHeap(nums);
for(int i = nums.size()-1;i>(int)nums.size()-k-1;i--){
swap(nums[0],nums[i]);
maxify(nums,0,i-1);
}
return nums[nums.size()-k];
}
};