Kth Largest Element in an Array

来源:互联网 发布:淘宝怎样申请退款 编辑:程序博客网 时间:2024/05/22 11:47

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.

利用分治算法,随机取数组中一个元素v,将数组分为三部分:小于v的数,等于v的数,大于v的数.通过比较k于这些子集所含元素数大小的关系,确定第k大数在哪个子集中.对该子集递归的分治.

class Solution {public:    int findKthLargest(vector<int>& nums, int k) {int r= rand()%nums.size();int v=nums[r];    vector<int> Sl,Sv,Sr;    for (int i = 0; i < nums.size(); ++i) {    if (nums[i] > v) Sl.push_back(nums[i]);    if (nums[i] == v) Sv.push_back(nums[i]);    if (nums[i] < v) Sr.push_back(nums[i]);    }    if (k <= Sl.size()) return findKthLargest(Sl,k);    else if (k> Sl.size() && k <= Sl.size()+Sv.size()) return v;    else return findKthLargest(Sr,k-Sl.size()-Sv.size());    }};




原创粉丝点击