453. Minimum Moves to Equal Array Elements
Quesetion:
Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input:
[1,2,3]
Output:
3
Explanation:
Only three moves are needed (remember each move increments two elements):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
Analyse:
计算方法大概是选择一个数不变,其他数均加1,直到所有数都相等
假如数可以无限减的话,可以反过来想,是不是就变成了,所有数都不变,只有一个数减一,直到所有数都相等最少需要操作几步?
代码如下
Code:
func minMoves(nums []int) int {
min := 0x7FF0000000000000
for _, num := range(nums) {
if (min > num) {
min = num
}
}
count := 0
for _, num := range(nums) {
count += num - min
}
return count
}
复杂度分析
计算复杂度O(n)
空间复杂度O(1)
PS:0x7FF0000000000000是GO语言中的正无穷大,可以参考