当前位置: 首页 > 知识库问答 >
问题:

最小移动到相等数组元素有助于理解解决方案

从元明
2023-03-14

我看到一个解决方案,我不能理解是什么立场背后的解决方案,我想理解为什么解决方案是正确的(什么立场背后的想法),问题是“最小移动到相等的数组元素”。我看到的解决方案是:

 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]

共有1个答案

翟修永
2023-03-14

根据我对@Larticho在评论中解释的问题的理解,给出的唯一运算符是负。因此,您不能做的是您不能更改最小值(或者如果您更改它,它是毫无意义的,它只会导致额外的移动)。因此,您所要做的是将所有其他元素的大小减小到最小值。因此,移动的总数等于所有元素从最小值一起移动的距离。

即。∑i=1..n(xi-min),如果把它放入两个单独的求和中,则为∑i=1..nxi-∑i=1..nmin,等于代码中写的∑xi-n*min。

 类似资料:
  • 1.索引x处元素可以在一次移动中直接移动到x+1,x+2位置或x-1,x-2位置,之后移动计数将增加。 例如,在数组中,最小移动将为31: 索引4处的所有8个元素可以在总共16次移动中移动到索引0(因为所有8个元素都需要2次移动)。移动:16. 索引5中的3个元素可以在3步中移动到索引3(3个元素每步移动1步),索引5中剩余的5个元素可以在10步中移动到索引2(5个元素每步移动2步,所以总共移动1

  • 我正在阅读这个问题的极客为极客网站。

  • 我想找到给定正整数数组中元素的最大数目,使得它们的和小于或等于给定的k。例如,我有一个数组 答案是3,因为1,2,3是求和6的最大元素。

  • 在一本书(算法导论,但我不记得是哪一章)中,我学到了求解两元素间最大差值问题: 两个元素之间的最大差,使得较大的元素出现在较小的数之后。 查找数组(至少包含一个数字)中和最大的相邻子数组。 例如,给定数组[-2,1,-3,4,-1,2,1,-5,4],相邻子数组[4,-1,2,1]的最大和=6。 为了解决的两元素间最大差异问题,可以将其转化为数组的最大子数组问题: 我在想为什么。

  • 本文向大家介绍基于js实现数组相邻元素上移下移,包括了基于js实现数组相邻元素上移下移的使用技巧和注意事项,需要的朋友参考一下 实现效果: 即需要实现当前元素与相邻元素交换位置, 当上移时,则是当前元素与上一元素调换位置;当下移时,则是当前元素与下一元素调换位置。 实现代码: js: html: 注意: 1.思想就是在数组中交换两个元素的位置,使用splice()的替换; 2.上移是跟上一元素交换

  • 给定一个有N个整数的数组A,我们需要找到子数组的最高和,使得每个元素小于或等于给定的整数X 示例:设 N=8 且数组为 [3 2 2 3 1 1 1 3] 。现在,如果 x=2,那么如果我们考虑 1 个基本索引,则通过求和 A[2] A[3] 来回答 4。如何在 O(N) 或 O(N*logN) 中执行此问题 目前,我通过检查每个可能的子阵列来采用O(N^2)方法。如何降低复杂性?