原题地址: 力扣每日一题:执行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;
}
}
如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤