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 - 1的数即可。
对于这题使用类似于快速排序的方法的方法,选择一个中心点,这里我将无序数组的中间位置的值作为中心点,将数组分为两个部分,比中心点大的放在左边,比中心点小的放在右边,将中心点孤立出来与k作比较,这个不需要像快排一样生成一个完整的有序数组,只要找出第k大的数字,所以方法比较简单,直接分为小数组,不需要在数组内进行交换,但是我的这个方法空间复杂度比较大。
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
vector<int> vec_one;
vector<int> vec_two;
int pivot = nums.size() / 2;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] > nums[pivot] && pivot != i) vec_one.push_back(nums[i]);
else if (nums[i] <= nums[pivot] && pivot != i) vec_two.push_back(nums[i]);
}
if (vec_one.size() == k - 1) return nums[pivot];
else if (vec_one.size() > k - 1) return findKthLargest(vec_one, k);
else if (vec_one.size() < k - 1) return findKthLargest(vec_two, k - 1 - vec_one.size());
}
};