453. Minimum Moves to Equal Array Elements移動最小的步數使所有元素相等
阿新 • • 發佈:2019-01-04
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();
}
};