第一个输入的是数组,第二个输入的值是需要减的值,第三个是k次,这里表述的时候后面一句话有些难以理解,是用数组的任何一个值减去x,得到新的数组的情况 ,如示例【7,2,1】减去3,得到的情况就有【4,2,1】、【7,-1,1】、【7,2,-1】三种,因为k=2,所以还需要减一次,第二次再减得到的数组【2,2,1】、【7,-4,1】、【7,2,-4】这样数组最大值最小的是2,所以输出2.
一开始想法是需要把数组中最大的数找出来,然后减去值,循环找最大值然后减掉值,直到次数达到k次,每次把最大值减去,就能得到数组最大数尽可能小
简化,创建最大优先队列,然后弹出最大值,然后再插入
public int minMax (ArrayList<Integer> a, int k, int x){
//创建最大优先队列(大在头)
PriorityQueue<Integer> queue1 = new PriorityQueue<>( (o1,o2) -> o2-o1);
//添加元素进入优先队列
for (int i:a){
queue1.add(i);
}
//k次最大值-x
for (int j=0;j<k;j++){
int max = queue1.poll();
queue1.add(max-x);
}
return queue1.poll();
}