小红想在
次操作之后,数组的最大值尽可能小。请你返回这个最大值。
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);
}
}