【每日一题】执行 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

写在最后

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

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

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

相关推荐
瓦香钵钵鸡42 分钟前
机器学习通关秘籍|Day 02:特征降维、用KNN算法和朴素贝叶斯实现分类
算法·机器学习·分类·贝叶斯·knn·超参数搜索·交叉验证
山烛3 小时前
决策树学习全解析:从理论到实战
人工智能·python·学习·算法·决策树·机器学习
修己xj4 小时前
探索设计模式的宝库:Java-Design-Patterns
算法
鲨鱼辣椒_TUT4 小时前
MySQL连接算法和小表驱动大表的原理
mysql·算法·adb
设计师小聂!4 小时前
力扣热题100------21.合并两个有序链表
算法·leetcode·链表
এ᭄画画的北北5 小时前
力扣-1.两数之和
数据结构·算法·leetcode
shenghaide_jiahu5 小时前
数学建模——递归和动态规划
算法·数学建模·动态规划
清朝牢弟5 小时前
Ubuntu系统VScode实现opencv(c++)图像像素类型转换和归一化
c++·opencv·ubuntu
凯子坚持 c6 小时前
动态规划专题:详解二维费用背包问题——以“一和零”与“盈利计划”为例
算法·动态规划