难度 简单
题目描述:给你一个长度为 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 == nums.length
1 <= nums.length <= 105
-109 <= nums[i] <= 109
答案保证符合 32-bit 整数
来源:力扣(LeetCode)
链接:
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
这道题是个简单题,但我不会做,看到大佬的分析,设几个未知数算一下就出来了,感觉自己差距还是太大了,所以记录下来涨个记性!!!
附上大佬的分析:
思路:
数学题
假设目前数组总和为sum,我们需要移动次数为m,那么整体数组总和将会增加m * (n - 1),这里的n为数组长度,最后数组所有元素都相等为x,于是有:
sum + m * (n - 1) = x * n (1)
我们再设数组最小的元素为min_val,m = x - min_val,即 x = m + min_val带入(1)得:
m = sum - min_val * n
class Solution {
public:int minMoves(vector<int>& nums) {int min_val = INT_MAX;int sum = 0;for (auto x:nums) {sum += x;if (x < min_val) {min_val = x;}}return sum - min_val*nums.size();}
};
本文发布于:2024-01-31 12:40:22,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170667602428583.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |