算法|每日一题|执行K次操作后的最大分数|贪心+优先队列

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

原题地址: 力扣每日一题:执行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 的最小整数。

class Solution {
    public long maxKelements(int[] nums, int k) {
    	//规则是降序排列
        PriorityQueue<Integer> q = new PriorityQueue<Integer>((a, b) -> b - a);
        for (int num : nums) {
            q.offer(num);
        }
        long ans = 0;
        for (int i = 0; i < k; i++) {
        	//一直取队列首最大的值
            int x = q.poll();
            ans += x;
            // (x + 2)保证向上取整
            q.offer((x + 2) / 3);
        }
        return ans;
    }
}

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤

你可能感兴趣的:(不易,力扣算法每日一题,算法,leetcode,java)