zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    bootstrap多选框
    window.open()总结
    sql游标及模仿游标操作
    表变量及临时表数据批量插入和更新 写法
    表变量类型的创建及使用
    事物及exec
    [NOI2017]蚯蚓排队
    [NOI2017]游戏
    [NOI2017]蔬菜
    luogu P4194 矩阵
  • 原文地址:https://www.cnblogs.com/seyjs/p/9243927.html
Copyright © 2011-2022 走看看