当前位置: 首页 > article >正文

【数据结构-堆】力扣2530. 执行 K 次操作后的最大分数

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

在一步 操作 中:

选出一个满足 0 <= i < nums.length 的下标 i ,
将你的 分数 增加 nums[i] ,并且
将 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,2,1,3,3] 。分数增加 3 。
最后分数是 10 + 4 + 3 = 17 。

在这里插入图片描述

优先队列

class Solution{
public:
    long long maxKelements(vector<int>& nums, int k) {
        priority_queue<int> q(nums.begin(), nums.end());
        long long ans = 0;
        for(int i = 0; i < k; i++){
            int a = q.top();
            q.pop();
            ans += a;
            int b = ceil(a / 3.0);
            q.push(b);
        }
        return ans;
    }
};

这道题难度不大,实际上就是模拟,我们由于要让分数最大,所以每次要将nums中最大的数加入到ans中,我们可以使用优先队列来进行降序排序。我们这里要注意的是题目要求向上取整,使用ceil的时候由于ceil支持的是float或者double,所以我们不能直接ceil(a/3)而ceil(a/3.0),确保是浮动除法。


http://www.kler.cn/a/468206.html

相关文章:

  • mongodb==安装prisma连接
  • Pytorch 三小时极限入门教程
  • STM32的LED点亮教程:使用HAL库与Proteus仿真
  • Java虚拟机面试题:内存管理(上)
  • [读书日志]从零开始学习Chisel 第一篇:书籍介绍,Scala与Chisel概述,Scala安装运行(敏捷硬件开发语言Chisel与数字系统设计)
  • pdf预览兼容问题- chrome浏览器105及一下预览不了
  • Ungoogled Chromium127 编译指南 MacOS 篇(二)- 项目要求
  • 查找项目的classes目录路径要使用“classpath:“类路径前缀
  • [最新] SIM卡取出后还能找到我的iPhone吗?
  • 单片机-串转并-74HC595芯片
  • Git 新手无忧:常用命令与错误解决攻略
  • C++ 设计模式:解析器模式(Interpreter Pattern)
  • 基于STM32环境温湿度监测系统设计(附项目代码zip)
  • 以往博客的复习补充——part1
  • vim 的基础使用
  • 基于服务器部署的综合视频安防系统的智慧快消开源了。
  • Unity Canvas中显示粒子特效
  • 【网络协议】开放式最短路径优先协议OSPF详解(四)
  • 【踩坑指南2.0 2025最新】Scala中如何在命令行传入参数以运行主函数
  • 在Mac电脑上搭建Gradle
  • 太速科技-135-4路250Msps 16bit AD采集PCIe卡
  • 利用JAVA爬虫获取item_search_img-按图搜索1688商品(拍立淘)接口
  • <论文>聊聊初代LLaMA
  • Unity3D仿星露谷物语开发13之角色感知道具
  • 【项目开发】C#环境配置及VScode运行C#教程(学生管理系统)
  • 使用qiankun搭建微前端应用及踩坑