题目: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;
}