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<int> nums) {
        // write your code here
        return findKthLargestElement(k,nums,0,nums.size()-1);
    }
    int findKthLargestElement(int k,vector<int>& 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<int>&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]<nums[start])
            {
                swap(nums[i],nums[j]);
                i++;
            }
            j++;
        }
        swap(nums[start],nums[i-1]);
        return i-1;
    }
};
    原文作者:LintCode题目解答
    原文地址: https://blog.csdn.net/wangyuquanliuli/article/details/47758327
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞