题目如下:
解题思路:我的解法很简单,每次操作对除了最大值外的其他元素做+1的操作,直到把最小值加到和最大值一样大;这样的,原来的最大值变成了最小值,原来的次大值就变成了最大值。继续+1的操作,直到最小值和最大值相等。如下图,假设输入数组为[5,5,6,8,8],可以很明显的看出规律。
代码如下:
class Solution(object): def minMoves(self, nums): """ :type nums: List[int] :rtype: int """ if len(nums) <= 1: return 0 elif len(nums) == 2: return abs(nums[0] - nums[1]) res = 0 nums.sort() #排序,方便求次大值 minv = nums[0] maxv = nums[-1] secInx = -2 secMaxv = nums[secInx] while True: diff = (maxv - minv) res += diff minv = minv + diff maxv = secMaxv + diff if minv == maxv: break secInx -= 1 secMaxv = nums[secInx] + res #次大值是初始值加上每一步的累加值 return res