📅  最后修改于: 2023-12-03 15:40:16.559000             🧑  作者: Mango
给定一个整数数组 nums,找到最小正整数K,使得 nums 中的所有元素可以通过最多递增或递减K来相等。
我们可以先找到数组中的最大值和最小值,然后计算它们的差值diff。如果diff为0,则已经满足条件。否则我们需要将所有元素逐个转化为相同的元素,最多可以经过maxDiff或者minDiff此类diff次调整。将diff平均分配到这些转化中,如果diff除以nums长度有余数,则增加一次转化。
def findMinK(nums):
if len(nums) < 2:
return 0
maxNum, minNum = max(nums), min(nums)
diff = maxNum - minNum
if diff == 0:
return 0
cnt = len(nums)
avgDiff, extraDiff = divmod(diff, cnt)
return 1 if extraDiff else avgDiff
assert findMinK([1, 2, 3, 4, 5]) == 0
assert findMinK([1, 3, 5, 7, 9]) == 4
assert findMinK([1, 5, 10, 15]) == 2