Fork me on GitHub

[leetcode-215-Kth Largest Element in an Array]

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.

Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.

 

思路:

利用快排划分的思想来找。注意从小到大排序以后,第k大的是num[n-k]。

int partion (vector<int>& nums,int begin,int end)
    {
        int pivot = nums[begin];
        while(begin<end)
        {
            while(nums[end]>=pivot && begin<end)end--;
            nums[begin] = nums[end];            
            while(nums[begin]<=pivot && begin<end)begin++;
            nums[end] = nums[begin];
        }
        nums[begin] = pivot;
        return begin;
    }
    int findKthLargest(vector<int>& nums, int k)
    {
        int begin =0,end = nums.size()-1,n =nums.size();
        while(begin<end)
        {
            int j = partion(nums,begin,end);
            if(j==n-k)break;
            else if(j<n-k)begin = j+1;
            else end = j-1;            
        }
        return nums[n-k];
    }

 

posted @ 2017-08-26 17:28  hellowOOOrld  阅读(155)  评论(0编辑  收藏  举报