priority_queue 创建

38 阅读1分钟

首先,在C++中,你不能直接将一个迭代器范围赋值给priority_queue对象。需要使用构造函数来初始化priority_queue对象。所以,将 q=(nums.begin(),nums.end()); 改为 priority_queue<int> q(nums.begin(), nums.end());

其次,ceil(x*1.0/3*1.0) 这部分计算的逻辑也有问题。因为整数除法会向下取整,所以 (x + 2) / 3 可以实现将x除以3并向上取整的效果。修改为 q.push((x + 2) / 3);

最后,将 int ans=0; 改为 long long ans=0;,以防止结果溢出。

以下是修改后的代码:

cppCopy Code
class Solution {
public:
    long long maxKelements(vector<int>& nums, int k) {
        priority_queue<int> q(nums.begin(), nums.end());
        long long ans = 0;
        for (int i = 0; i < k; i++) {
            int x = q.top();
            ans += x;
            q.pop();
            q.push((x + 2) / 3);
        }
        return ans;
    }
};

这样修改后的代码应该能够正确执行,并返回数组中前k个最大数除以3向上取整后的和。