class Solution(object):
def minMoves(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
s = sum(nums)
minNum = min(nums)
l = len(nums)
m = s- minNum*l
return m
解释:
let’s define sum as the sum of all the numbers, before any moves; minNum as the min number int the list; n is the length of the list;
After, say m moves, we get all the numbers as x , and we will get the following equation
sum + m * (n - 1) = x * n
and actually,
x = minNum + m
and finally, we will get
sum - minNum * n = m
So, it is clear and easy now.
why x=minNum+m:
Before all elements reach to the same value, every time (n-1) elements add one meaning only one element remains the same, which of cause should be the max value( should be different from min value, otherwise they have reached the same value) of the array. So, with that being said, every time doing add one for (n-1) operation, the min value +1. If it takes m moves to reach x, then x=minNum+m. Also, I have a similar post, my post, you can take a look if you are still interested.