题目
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.
分析
这道题要用到类似与快速排序的算法,大致的方法是先先使用
divide
来进行切分,能够返回一个数组中某个数的大小排位,使得数左边的数比它小,右边的数比他大。然后一直递归,找到第K大的数
代码
class Solution { public: int findKthLargest(vector<int>& nums, int k) { int l = 0, h = nums.size() - 1; k = nums.size() - k; while (h > 1) { int temp = divide(nums, l, h); if (temp == k) { return nums[k]; } else if (temp > k) { h = temp - 1; } else { l = temp + 1; } } return nums[k]; }; int divide(vector<int>& nums, int low, int high) { int l = low, h = high; int num = nums[h]; while (l < h) { while (nums[l] < num && l<h) l++; while (nums[h] >= num && l < h) h--; int temp = nums[l]; nums[l] = nums[h]; nums[h] = temp; } int temp = nums[high]; nums[high] = nums[h]; nums[h] = temp; return h; } };