leetcode最小移动次数使数组元素相等

1.数学法

每次n-1个元素加1,相当于每次只有一个元素减1,而我们只对元素的相对大小不变,求最终相等执行操作的次数。

则只需要求得最小值,然后遍历数组,记录每个元素值与最小值的差,并求和即可。

代码如下:

class Solution {
public:
    int minMoves(vector<int>& nums) {
      //每一次操作能使n-1个元素加1,可以变为每次只有一个元素减1,直到最后所有元素相等
      int len=nums.size();
      int imin=nums[0];
      for(int i=0;i<len;i++)
        imin=min(imin,nums[i]);
     int count=0;
     for(int i=0;i<len;i++)
       count+=nums[i]-imin;
    return count;
    }
};

如果直接求和,使用sum-imin*len可能会出现sum溢出的情况

发布了191 篇原创文章 · 获赞 3 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_38196982/article/details/104797345
今日推荐