这段代码的时间复杂度是否为O(N)?

时间:2017-07-29 17:03:23

标签: c++ algorithm

此代码的时间复杂度是否为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();
        }
    };

1 个答案:

答案 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为基础