Description
 
 
 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.
 
 
Solution
 
将数组排序,然后直接通过索引返回第k大的数字
 
int findKthLargest(
vector<int>& nums, 
int k){
    sort(nums.begin(), nums.end());
    reverse(nums.begin(), nums.end());
    
return nums[k-
1];
} 
利用分治思想写出快速选择算法耶鲁大学:QuickSelect算法
 
#include <iostream>
#include <vector>
using namespace std;
int findKthLargest(
vector<int>& nums, 
int k){
    
vector<int> left;
    
vector<int> right;
    
int pivot = nums[
0];
    
for(
int i = 
1; i < nums.size(); i++){
        
if(nums[i] <= pivot) left.push_back(nums[i]);
        
else right.push_back((nums[i]));
    }
    
if(k <= right.size()) 
return findKthLargest(right, k);
    
else if(k-
1 == right.size()) 
return pivot;
    
else return findKthLargest(left, k-right.size()-
1);
}
int main(){
    
int ary[
10] = {
3, 
2, 
1, 
5, 
6, 
4};
    
vector<int> vec(ary, ary+
6);
    
cout<<findKthLargest(vec, 
2);
} 
快速选择算法在LeetCode平台上会出现内存超限(Memory Limit Exceeded)的问题,这与C++中内存的管理模式有关:vector内存空间只会增长,不会减小。
                
                
                
        
    
                    转载请注明原文地址: https://ju.6miu.com/read-36798.html