### 453. Minimum Moves to Equal Array Elements





题目： 
<https://leetcode.com/problems/minimum-moves-to-equal-array-elements/>



难度 : Easy



思路：

naive TLE 代码：

每次都是给并不是最大的元素加1直到全部相等。

```
class Solution(object):
    def minMoves(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        while(not all(x == nums[0] for x in nums)):
        	nums.sort()
        	for i in range(len(nums) - 1):
        		nums[i] += 1
        	res += 1

        return res
```



给的测试例子是 `[1,2147483647]`能不TLE么？tag 是Math，所以要用观察到的结果来做吧？

所以就是每个和最小值来比，看到底要增加多少，这是观察，但不是证明





AC代码

```python
class Solution(object):
    def minMoves(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        res = 0
        minVal = min(nums)
        for num in nums:
        	res += num -minVal
        return res
```



类证明：



> 其实给n-1个数字加1，效果等同于给那个未被选中的数字减1，比如数组[1，2，3], 给除去最大值的其他数字加1，变为[2，3，3]，我们全体减1，并不影响数字间相对差异，变为[1，2，2]，这个结果其实就是原始数组的最大值3自减1，那么问题也可能转化为，将所有数字都减小到最小值，这样难度就大大降低了，我们只要先找到最小值，然后累加每个数跟最小值之间的差值即可

