Skip to content

Latest commit

 

History

History
72 lines (40 loc) · 1.54 KB

453._Minimum_Moves_to_Equal_Array_Elements.md

File metadata and controls

72 lines (40 loc) · 1.54 KB

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代码

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,那么问题也可能转化为,将所有数字都减小到最小值,这样难度就大大降低了,我们只要先找到最小值,然后累加每个数跟最小值之间的差值即可