首页 > 试题广场 >

小红的数组操作

[编程题]小红的数组操作
  • 热度指数:3639 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红拿到了一个数组 a,每次操作小红可以选择数组中的任意一个数减去 x,小红一共能进行 k 次。
小红想在 k 次操作之后,数组的最大值尽可能小。请你返回这个最大值。
示例1

输入

[7,2,1],3,2

输出

2
import java.util.*;


public class Solution {
    public int minMax (ArrayList<Integer> a, int k, int x) {
        //创建优先级队列,并使用Collections.reverseOrder()构造一个最大优先队列
        PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
        //调用addAll方法直接传入ArrayList集合
        pq.addAll(a);
        return minMaxHelp(pq,k,x);
    }
    public int minMaxHelp(PriorityQueue<Integer> pq , int k ,int x) {
        //偷窥当前队列中的最大优先级数值
        int peek = pq.peek();
        int peek1 = peek - x;
        k--;
        //移除最大优先级数值
        pq.remove(peek);
        //添加操作后的数值
        pq.add(peek1);
        //操作次数为0就返回队列中最大优先级数值,否则就递归调用
        if (k == 0) return pq.peek();
        return minMaxHelp(pq,k,x);
    }
}

编辑于 2022-08-11 23:29:56 回复(0)

问题信息

上传者:小小
难度:
1条回答 8473浏览

热门推荐

通过挑战的用户