题目描述
给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1
返回让数组所有元素相等的最小操作次数。
示例 1:
输入:nums = [1,2,3]
输出:3
解释:
只需要3次操作(注意每次操作会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
示例 2:
输入:nums = [1,1,1]
输出:0
题解思路
返回让数组所有元素相等的最小操作次数,猛的一看确实挺复杂的,需要n-1个元素加1
但是如果我们采用逆向思维,使n-1个元素减1使得所有的元素都等于最小值即可
正确代码
public int minMoves(int[] nums) {
int min = Arrays.stream(nums).min().getAsInt(), ans = 0;
for (int num : nums) {
ans += num - min;
}
return ans;
}
总结
逆向思维往往可以简化问题,如果循规蹈矩像我一开始一样,就会出现很多奇怪的想法
比如说求和每次除以数组长度,能整除就可以,但是这是错误的思想,要不就dp,总是都是很麻烦
如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见