LintCode 5 第K大元素

题目:kthLargestElement


要求:

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

 注意事项

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

样例:

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

算法要求:

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

解题思路:

用计数排序就可以解决,注意的是,需要从后往前计数,所以需要用一个max来记录最大值。

算法如下:

    int kthLargestElement(int k, vector<int> nums) {
        // write your code here
       int a[1000000] = {0};
       int min = 500000;
       int max = -999999;
       vector<int>::iterator it;
       for (it = nums.begin(); it != nums.end(); it++) {
           a[*it+500000]++;
           if (max < *it ) {
               max = *it;
           }
       }
       int n = 0;
       int i = max;
       while (n < k) {
           n += a[i+500000];
           i--;
       }
       return i+1;
    }

你可能感兴趣的:(LintCode)