LintCode-第k大元素

在数组中找到第k大的元素

您在真实的面试中是否遇到过这个题? 
Yes
样例

给出数组[9,3,2,4,8]第三大的元素是4

给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推

注意

你可以交换数组中的元素的位置

挑战

要求时间复杂度为O(n),空间复杂度为O(1)

标签  Expand  

相关题目  Expand 


分析:利用快排的思想,不断partition,

代码:

class Solution {
public:
    /*
     * param k : description of k
     * param nums : description of array and index 0 ~ n-1
     * return: description of return
     */
    int kthLargestElement(int k, vector nums) {
        // write your code here
        return findKthLargestElement(k,nums,0,nums.size()-1);
    }
    int findKthLargestElement(int k,vector& nums,int start,int end)
    {
        if(start==end)
            return nums[start];
        int index = partition(nums,start,end);
        if(end-index+1==k)
            return nums[index];
        else if(end-index+1>k)
            return findKthLargestElement(k,nums,index+1,end);
        else
            return findKthLargestElement(k-(end-index+1),nums,start,index-1);
    }
    int partition(vector&nums,int start,int end)
    {
        int x =  (start+end)/2;
        swap(nums[start],nums[x]);
        int i = start+1;
        int j = i;
        while(i<=end&&j<=end)
        {
            if(nums[j]


你可能感兴趣的:(算法,面试)