LeetCode每日一题:2530. 执行 K 次操作后的最大分数(2023.10.18 C++)

编程入门 行业动态 更新时间:2024-10-26 20:21:43

LeetCode每日一题:2530. 执行 K 次操作后的最大<a href=https://www.elefans.com/category/jswz/34/1769470.html style=分数(2023.10.18 C++)"/>

LeetCode每日一题:2530. 执行 K 次操作后的最大分数(2023.10.18 C++)

目录

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

题目描述:

实现代码与解析:

贪心 + 优先级队列

原理思路:


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

题目描述:

        给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。你的 起始分数 为 0 。

在一步 操作 中:

  1. 选出一个满足 0 <= i < nums.length 的下标 i ,
  2. 将你的 分数 增加 nums[i] ,并且
  3. 将 nums[i] 替换为 ceil(nums[i] / 3) 。

返回在 恰好 执行 k 次操作后,你可能获得的最大分数。

向上取整函数 ceil(val) 的结果是大于或等于 val 的最小整数。

示例 1:

输入:nums = [10,10,10,10,10], k = 5
输出:50
解释:对数组中每个元素执行一次操作。最后分数是 10 + 10 + 10 + 10 + 10 = 50 。

示例 2:

输入:nums = [1,10,3,3,3], k = 3
输出:17
解释:可以执行下述操作:
第 1 步操作:选中 i = 1 ,nums 变为 [1,4,3,3,3] 。分数增加 10 。
第 2 步操作:选中 i = 1 ,nums 变为 [1,2,3,3,3] 。分数增加 4 。
第 3 步操作:选中 i = 2 ,nums 变为 [1,1,1,3,3] 。分数增加 3 。
最后分数是 10 + 4 + 3 = 17 。

提示:

  • 1 <= nums.length, k <= 105
  • 1 <= nums[i] <= 109

实现代码与解析:

贪心 + 优先级队列

class Solution {
public:long long maxKelements(vector<int>& nums, int k) {priority_queue<int> q;for (auto t: nums) {q.push(t);}long long res = 0;while(k--) {int t = q.top();cout << t << endl;q.pop();res += t;q.push((t + 2) / 3); // 妙啊}return res;}
};

原理思路:

        简单题,每次选出最大的,很容易想到优先级队列,取最大计算,然后/3后再次入队。

 q.push((t + 2) / 3); // 妙啊

        如果在+2前本身就不够除3就会/3后比不+2的值大1,若正好除3,+2,/3后就是会向下取整,也能得到正确值。和四舍五入+0.5有异曲同工之妙。

        最近的题都挺简单的,就没写题解。

更多推荐

LeetCode每日一题:2530. 执行 K 次操作后的最大分数(2023.10.18 C++)

本文发布于:2023-12-07 03:11:51,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1669899.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分数   操作   LeetCode

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!