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

写在最后

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

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

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

相关推荐
开发者驿站3 分钟前
2025年保姆级C++环境配置教程(Windows/macOS双平台)
c++·windows·macos
辰尘_星启11 分钟前
『CMake』关于使用CMake构建项目时的现代/传统指令
c++·架构·系统·cmake·项目·构建
自信1504130575927 分钟前
初学者小白复盘15之指针(4)
c语言·数据结构·算法
郝学胜-神的一滴28 分钟前
Cesium绘制线:从基础到高级技巧
前端·javascript·程序人生·线性代数·算法·矩阵·图形渲染
AA陈超36 分钟前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-13 属性菜单 - 边框值
c++·游戏·ue5·游戏引擎·虚幻
东皇太星1 小时前
机器学习概念,算法原理及应用
算法·机器学习·梯度下降法
.格子衫.1 小时前
021数据结构之并查集——算法备赛
数据结构·算法
姝孟1 小时前
C++学习——类与对象详细知识点总结
c++·笔记·学习
im_AMBER1 小时前
Leetcode 35
笔记·学习·算法·leetcode
码农多耕地呗1 小时前
力扣101.对称二叉树(java)
算法·leetcode