-
题目链接 https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements-ii/submissions/
-
题目描述
- 给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。
-
输入: [1,2,3] 输出: 2 说明: 只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1): [1,2,3] => [2,2,3] => [2,2,2]
-
解题思路
- 排序 -> 找到中位数 -> 所有数与中位数差值的和就是就是最少移动次数
- 不管是选中位数左边的数还是右边的数,得到的结果都不可能比选中位数小
-
代码
- python
class Solution: def minMoves2(self, nums: List[int]) -> int: nums.sort() N = len(nums) num, m = nums[N // 2], N // 2 return m * num - sum(nums[:m]) + sum(nums[m + 1:]) - (N - m - 1) * num
- python
-
总结
- 这道题一开始以为求状态转移的最短路径,想到用BFS。。。果断GG= =、
leetcode 462. 最少移动次数使数组元素相等 II
猜你喜欢
转载自blog.csdn.net/qq_38043440/article/details/88591712
今日推荐
周排行