📅  最后修改于: 2023-12-03 14:57:35.332000             🧑  作者: Mango
当我们考虑数组递减时,如果需要将所有数组元素变为相等的值,则我们需要找到一个最小的元素,使得将其减少到该值后,每个元素都变为相等的值。这个最小元素就是我们需要的答案。
min_val
。sum
。target
,即sum - min_val * n
,其中n
为数组元素的数量。target
小于0,则无法使所有元素相等,返回-1。target
。时间复杂度:O(n)
def min_elements(arr):
min_val = float('inf')
sum_val = 0
for val in arr:
sum_val += val
if val < min_val:
min_val = val
target = sum_val - min_val * len(arr)
return -1 if target < 0 else target
>>> arr = [4, 5, 2, 3, 1]
>>> min_elements(arr)
7
解释:将数组中的4、5、2、3递减为1的代价为7,即arr = [1, 1, 1, 1, 1]
。
>>> arr = [4, 4, 4]
>>> min_elements(arr)
0
解释:数组元素已经相等,不需要递减,返回0。
>>> arr = [4, 3, 2]
>>> min_elements(arr)
-1
解释:将数组元素递减为相等的值需要将所有元素变为1,这会导致最小值变为1,所以无法将所有元素递减为相等的值。返回-1表示没有解决方案。