453.Minimum Moves to Equal Array Elements
453.Minimum Moves to Equal Array Elements
难度:Easy
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。
示例:
解释: 只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
直观方法是将数组排序,然后每次将前面n-1个元素加1,如果碰到倒数第二个值大于最后一个值,则交换两个数,直到第一个数和最后一个数相等。但是会显示超时。 另一个比较好的解决方法是从反面考虑,每次将n-1个元素加1,相当于将一个元素-1,之后整体相对大小关系不变。所以每个数减到和最小值相等即可。可以在线性时间内完成,时间复杂度是O(N)。
执行用时 : 52 ms, 在Minimum Moves to Equal Array Elements的C++提交中击败了93.27% 的用户 内存消耗 : 10.8 MB, 在Minimum Moves to Equal Array Elements的C++提交中击败了85.59% 的用户
Last updated