1. 程式人生 > >453. Minimum Moves to Equal Array Elements移動最小的步數使所有元素相等

453. Minimum Moves to Equal Array Elements移動最小的步數使所有元素相等

Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input:
[1,2,3]

Output:
3

Explanation:
Only three moves are needed (remember each move increments two elements):

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

因為每個數都會經歷遞增的過程,最後達到一個ceiling。假設陣列元素最終為X,陣列最小元素min需要經過X-min次增長,最大元素max需要經過X-max次增長,(X-min)-(X-max)=max-min就是max不變 其餘元素包括min 增長的次數,經過這些次增長後,min元素和max元素大小相等,且它倆成為當前陣列最小元素。 然後我們再讓這倆最小元素增長到當前陣列最大元素(初始陣列次最大元素max2)的大小,增長的次數是max2-min,最終使得這三個元素相等。每一次增長都讓陣列中大小相同的元素增加一個,從1到2到3~~~n,故總共增加了max-min,max2(初始陣列次最大元素)-min,max3-min,,,總和就是sum-min*n

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