老鼠和奶酪

题解方法

  • 贪心
  • 优先队列

    贪心

  1. 假设 n 块奶酪都被第二只小鼠吃掉,记为 $sum$。
  2. 如果第 i 块奶酪被第一只小鼠吃掉,数值差值记为 $diff[i]$。
  3. 差值 $diff$ 降序排列,取前 k 个值与 $sum$ 相加即为结果。

    优先队列

    使用优先队列在一次遍历中维护 $diff$ 中前 k 个最大值。

    会增加时间和空间的开销。

    核心代码

    1
    2
    3
    4
    5
    6
    7
    8
    for (int i = 0; i < reward1.length; i++) {  
    sum += reward2[i];
    queue.add(reward1[i] - reward2[i]);

    if (queue.size() > k) {
    queue.poll();
    }
    }

    题目来源