当前位置:   article > 正文

leetcode-移除石子使总数最小_给你一个整数数组,screens[i] 表示第 i 个计数器屏幕上显示的数字。你可以对以下

给你一个整数数组,screens[i] 表示第 i 个计数器屏幕上显示的数字。你可以对以下

给你一个整数数组 piles ,数组 下标从 0 开始 ,其中 piles[i] 表示第 i 堆石子中的石子数量。另给你一个整数 k ,请你执行下述操作 恰好 k 次:

选出任一石子堆 piles[i] ,并从中 移除 floor(piles[i] / 2) 颗石子。
注意:你可以对 同一堆 石子多次执行此操作。

返回执行 k 次操作后,剩下石子的 最小 总数。

floor(x) 为 小于 或 等于 x 的 最大 整数。(即,对 x 向下取整)。

示例 1:

输入:piles = [5,4,9], k = 2
输出:12
解释:可能的执行情景如下:

  • 对第 2 堆石子执行移除操作,石子分布情况变成 [5,4,5] 。
  • 对第 0 堆石子执行移除操作,石子分布情况变成 [3,4,5] 。
    剩下石子的总数为 12 。
    示例 2:

输入:piles = [4,3,6,7], k = 3
输出:12
解释:可能的执行情景如下:

  • 对第 2 堆石子执行移除操作,石子分布情况变成 [4,3,3,7] 。
  • 对第 3 堆石子执行移除操作,石子分布情况变成 [4,3,3,4] 。
  • 对第 0 堆石子执行移除操作,石子分布情况变成 [2,3,3,4] 。
    剩下石子的总数为 12 。
java代码:
class Solution {
    PriorityQueue<Integer> maxHeap;
    public int minStoneSum(int[] piles, int k) {
        maxHeap = new PriorityQueue<Integer>(piles.length,new Comparator<Integer>(){
            @Override
            public int compare(Integer i1,Integer i2){
                return i2-i1;
            }
        });
        int ans = 0;
        for(int p:piles){
            maxHeap.add(p);
            ans += p;
        }
        while(k-- > 0){
            int x = maxHeap.poll();
            ans -= x/2;
            x = (x+1)/2;
            maxHeap.add(x);
        }
        return ans;
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/370255
推荐阅读
相关标签
  

闽ICP备14008679号