1. 程式人生 > >LeetCode 453. 最小移動次數使陣列元素相等

LeetCode 453. 最小移動次數使陣列元素相等

給定一個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n - 1 個元素增加 1。

示例:

輸入:
[1,2,3]

輸出:
3

解釋:
只需要3次移動(注意每次移動會增加兩個元素的值):

[1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]

解題思路:

每次最優的操作就是把除了最大的數的其他數全部加一,也就相當於把最大的數減一,那麼把所有的數全部減到最小數就可以了。

程式碼:

class Solution {
public:
    int minMoves(vector<int>& nums) {
        int sum, m;
        sum = m = nums[0];
        for(int i = 1 ; i < nums.size(); i ++ ){
            m = min(nums[i], m);
            sum += nums[i];
        }
        return sum-m*nums.size();
    }
};