【每日一题】执行 K 次操作后的最大分数

文章目录

Tag

【贪心】【数组】【2023-10-18】


题目来源

2530. 执行 K 次操作后的最大分数


题目解读

对数组执行k次操作后可以得到的最大分数。操作指的是从数组中拿出一个数 num,分数指的是拿的这个数的值,每拿完一个数还要将 ceil(num / 3) 放回数组。


解题思路

方法一:贪心

为了获取最大的分数,每次从数组中选择最大的数 num,并将 ceil(num / 3) 加入到数组中。

为了方便取出数组中的最大值以及更新数组后的最大值,我们可以维护一个优先队列来放置数组中的元素以及更新得到的元素。建立优先队列的时间复杂度为 O ( l o g n ) O(logn) O(logn), n n n为数组 nums 的长度,空间复杂度为 O ( l o g n ) O(logn) O(logn)。从优先队列中选出最大元素的时间复杂度为 O ( 1 ) O(1) O(1)。

实现代码

cpp 复制代码
class Solution {
public:
    long long maxKelements(vector<int>& nums, int k) {
        long long res = 0;
        priority_queue<long long>pq;
        for(int num : nums) {
            pq.push(num);
        }
        while (k --) {
            long long tmp = pq.top();
            res += tmp;
            pq.pop();
            pq.push((tmp + 2) / 3);
        }
        return res;
    }
};

复杂度分析

时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)。

空间复杂度: O ( l o g n ) O(logn) O(logn)。


其他语言

python3

python3 复制代码
import heapq
class Solution:
    def maxKelements(self, nums: List[int], k: int) -> int:
        pq = []
        for num in nums:
            heapq.heappush(pq, -num)
        
        res = 0
        while k:
            maxVal = heapq.heappop(pq)
            res += -maxVal
            heapq.heappush(pq, floor(maxVal / 3))
            k -= 1
        return res

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

相关推荐
惯导马工33 分钟前
【论文导读】ORB-SLAM3:An Accurate Open-Source Library for Visual, Visual-Inertial and
深度学习·算法
骑自行车的码农2 小时前
【React用到的一些算法】游标和栈
算法·react.js
博笙困了2 小时前
AcWing学习——双指针算法
c++·算法
感哥2 小时前
C++ 指针和引用
c++
moonlifesudo3 小时前
322:零钱兑换(三种方法)
算法
感哥13 小时前
C++ 多态
c++
沐怡旸20 小时前
【底层机制】std::string 解决的痛点?是什么?怎么实现的?怎么正确用?
c++·面试
NAGNIP21 小时前
大模型框架性能优化策略:延迟、吞吐量与成本权衡
算法
美团技术团队21 小时前
LongCat-Flash:如何使用 SGLang 部署美团 Agentic 模型
人工智能·算法
River4161 天前
Javer 学 c++(十三):引用篇
c++·后端