此代码的时间复杂度是否为O(N)? (在这段代码中我想找到第K个最大的数组元素)
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
make_heap(nums.begin(), nums.end());
for (int i = 0; i < k - 1; i ++) {
pop_heap(nums.begin(), nums.end());
nums.pop_back();
}
return nums.front();
}
};
答案 0 :(得分:2)
因为make_heap
已经在O(n),并且每个循环都在O(log n),所以算法的总时间复杂度为 O(n + k log n)。使用小k或“好”数据集,结果大致为O(n)且O()标记后面的常数,但是具有大k(接近或超过n / 2)或随机数据,则为O (n log n)。
另外我想指出这段代码正在修改原始数组(使用引用传递参数),这通常不是一个好习惯。
log在这篇文章中以2为基础