215. Kth Largest Element in an Array

来源:互联网 发布:海岛奇兵数据库 编辑:程序博客网 时间:2024/05/13 03:48

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.


class Solution {public:    int findKthLargest(vector<int>& nums, int k) {        arrangeRight(nums,0,nums.size()-1,k);//将前k个大数放在nums右边,O(n).        quickSort(nums,nums.size()-k,nums.size()-1); //对前k个数快排。O(klogk).        return nums[nums.size()-k];    }    void arrangeRight(vector<int>& nums, int start, int end, int k){    if(start >= end)    return;    int key = nums[start];    int i = start, j = end;    while(i!=j){    while(j>i && nums[j] >= key)    --j;    swap(nums,i,j);    while( i<j && nums[i] <= key)    ++i;    swap(nums,i,j);    }//a[i] = key    if(k == (nums.size() - i)) return;    if(k < (nums.size() - i)) arrangeRight(nums,i+1,end,k);    if(k > (nums.size() - i)) arrangeRight(nums,start,i-1,k-(nums.size()-i));    }        void quickSort(vector<int>& nums, int start, int end){    if(start >= end)    return;    int key = nums[start];    int i = start, j = end;    while(i!=j){    while(j>i && nums[j] >= key)    --j;    swap(nums,i,j);    while( i<j && nums[i] <= key)    ++i;    swap(nums,i,j);    }    quickSort(nums,start,i-1);    quickSort(nums,i+1,end);    }    void swap(vector<int> &v,int a,int b){        int t = v[a];        v[a] = v[b];        v[b] = t;    } };

Solution explained:点击打开链接

0 0
原创粉丝点击