2025/1/15 力扣每日一题(3066. 超过阈值的最少操作数 II)
来源:LeetCode
链接:https://leetcode.cn/problems/minimum-operations-to-exceed-threshold-value-ii/description/?envType=daily-question&envId=2025-01-15
题目:
给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。
一次操作中,你将执行:
选择 nums 中最小的两个整数 x 和 y 。
将 x 和 y 从 nums 中删除。
将 min(x, y) * 2 + max(x, y) 添加到数组中的任意位置。
注意,只有当 nums 至少包含两个元素时,你才可以执行以上操作。
你需要使数组中的所有元素都大于或等于 k ,请你返回需要的 最少 操作次数。
解题思路:
每次取最小的两个数进行操作,这样不满足条件的数字数量最少也会减一,由于每次操作完之后都需要进行插入和排序操作,因此我们选择使用优先队列(小根堆)
ac代码:
class Solution { public: int minOperations(vector<int>& nums, int k) { int ans = 0; priority_queue<long long,vector<long long>,greater<long long>> pq(nums.begin(),nums.end()); while(pq.top() < k){ long long x = pq.top(); pq.pop(); long long y = pq.top(); pq.pop(); pq.push(min(x,y)*2+max(x,y)); ans++; } return ans; } };
注意:
数据范围是:
2 <= nums.length <= 2 * 105
1 <= nums[i] <= 109
1 <= k <= 109
会超出int的范围,所以用long long
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具