【发布时间】:2020-10-06 20:17:18
【问题描述】:
我看到了一个解决方案,但我无法理解该解决方案背后的原因,我想了解为什么该解决方案是正确的(这个想法背后的原因是什么), 问题是“最小移动到相等的数组元素”。 我看到的解决方案是:
int minMoves(vector<int>& nums) {
long minimum = nums[0];
long sum = nums[0];
for (int i = 1; i < nums.size(); ++i) {
sum += nums[i];
if (nums[i] < minimum)
minimum = nums[i];
}
return sum - minimum * nums.size();
}
我不明白为什么元素的总和减去最小元素乘以数组的长度可以解决问题?
编辑:这是对问题的解释: 给定一个大小为 n 的非空整数数组,找到使所有数组元素相等所需的最小移动次数,其中移动将 n - 1 个元素增加 1。 示例:
输入: [1,2,3]
输出: 3
说明: 只需要三个动作(记住每个动作增加两个元素):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
【问题讨论】:
-
您应该首先详细说明问题所在,并举例说明。事实上,我无法理解问题所在。
-
我认为问题是这样的:你有一个整数数组,你唯一的动作是减少一个元素,拥有一个所有元素相等的数组的最小移动次数是多少。
-
问题正是“larticho”写的。
-
你确定这是正确的吗?你试过一些例子吗?这些实验的结果是什么?通过执行这些实验,你学到了什么? ...?
-
@RoniBelkin,编辑问题并在上面写下问题的定义。