题目描述
给定一个长度为 n 的 非空 整数数组,每次操作将会使 n - 1 个元素增加 1。找出让数组所有元素相等的最小操作次数。
- 示例:
输入:[1,2,3]
输出:3
解释:只需要3次操作(注意每次操作会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
这道题看起来很复杂,但实际上用数学的思路来想,会十分简单。
说是要将n-1个元素均增加1,换个角度想一下,不就是让剩余的这1个元素建减少1吗?
也就是该问题也就转换成了:每次将1个元素减1,使用最少的操作次数将所有元素相等。
这下就豁然开朗了,找到该数组中最小的那个元素,其它元素均减少至该值即可。示例的[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]也可变成 [1,2,3] => [1,1,3] => [1,1,2] => [1,1,1],同样需要三步。