【leetcode】453. Minimum Moves to Equal Array Elements

题目如下:

 

解题思路:我的解法很简单,每次操作对除了最大值外的其他元素做+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
原文地址:https://www.cnblogs.com/seyjs/p/9243927.html