#青训营笔记创作活动# 问题描述
小R拿到了一个数组,她可以进行如下操作:使得一个元素加1,另一个元素减1。她希望最终数组的每个元素大小都在[l, r]的范围内。小R想知道,最少需要多少次操作可以达到目标。

如果无法通过有限次操作使所有元素都落在指定范围内,则返回-1。

测试样例
样例1:

输入:n = 2 ,l = 3 ,r = 5 ,a = [1, 2]
输出:-1

样例2:

输入:n = 3 ,l = 4 ,r = 6 ,a = [3, 6, 5]
输出:1

样例3:

输入:n = 4 ,l = 2 ,r = 8 ,a = [1, 10, 2, 6]
输出:2

题解:
首先,整个数组的总和是不变的,所以数组的总和的下限和上限时相同的,于是第一步就是考虑这个数组是否可以塞进这个区间里。

不用考虑怎么变,只考虑是否能变。所以将所有低于l的元素和高于r的元素之间的差值取出,叫做lowsize和upsize,而其中的较大值就是最后的操作次数。因为其中高的可以补充低的,低的可以削减高的。
展开
2