这里没用排序做,用的哈希表,涉及到排序的话时间复杂度都大于o(n)了,不满足条件了
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
// 这个题不能用到排序,只要用到排序时间复杂度必然大于o(n);
vector<int> count(20001,0);
// 我们记录每个值出现的次数
for(auto it = nums.begin();it!=nums.end();it++){
if(*it>=0){
count[*it]++;
}else{
count[-*it+10000]++;
}
}
// 先遍历大于0的部分
for(int i=10000;i>=0;i--){
// 值i存在
if(count[i]>0){
k-=count[i];
if(k<=0){
// 这就是第k大的数
return i;
}
}
}
// 如果大于零的没找到,遍历小于0的部分
for(int i=10001;i<count.size();i++){
if(count[i]>0){
k-=count[i];
if(k<=0){
return 10000-i;
}
}
}
return 0;
}
};