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]; }};
新闻热点
疑难解答