1、題目
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.
2、解題思路
第i大,換句話就是,除去第1~第(i-1)後的第一大數。本質上,是一個遞歸的求數組最大元素的算法(分治體現)。找出數組最大元素,與數組最後一個元素交換,第二次從0~size-2找最大元素,與倒數第二個交換次序,循環i次後停止,返回[size-i]即爲第i大元素
3、代碼如下
class Solution {
public:
void findBigest(vector<int>& nums, int size) {
int large = nums[0];
int index = 0;
for (int i = 0; i < size; i++) {
if (nums[i] > large) {
large = nums[i];
index = i;
}
}
int temp = nums[size - 1];
nums[size - 1] = large;
nums[index] = temp;
}
int findKthLargest(vector<int>& nums, int k) {
for (int i = 0; i < k; i++) {
findBigest(nums, nums.size() - i);
}
return nums[nums.size() - k];
}
};