题目链接
分析
构建最小堆,每次取出堆顶的两个元素进行模拟即可
代码实现
class Solution {
public:
int minOperations(vector<int>& nums, int k) {
priority_queue<long long, vector<long long>, greater<>> pq(nums.begin(), nums.end());
int ans = 0;
while(pq.top() < k) {
long long x = pq.top();
pq.pop();
long long y = pq.top();
pq.pop();
pq.push(1ll * x * 2 + y);
ans++;
}
return ans;
}
};
复杂度分析
- 时间复杂度:$O(n \log n)$
- 空间复杂度:$O(n)$