題目:最小移動次數使數組元素相等
給定一個長度爲 n 的非空整數數組,找到讓數組全部元素相等的最小移動次數。每次移動可使 n - 1 個元素增長 1。
複製代碼
示例:
輸入:
[1,2,3]
輸出:
3
解釋:
只須要3次移動(注意每次移動會增長兩個元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
複製代碼
思考:
這道題能夠反過來想,按題意將n-1個元素加1,其實能夠當作給剩下的那個數減1。
加一:[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
減一:[1,2,3] => [1,2,2] => [1,1,2] => [1,1,1]
因此先求出最小的元素,在求出全部元素與最小元素的差值的和,即爲最小移動次數。
複製代碼
實現:
class Solution {
public int minMoves(int[] nums) {
int min = nums[0];
int count = 0;
for(int i = 0;i<nums.length;i++){
min = Math.min(nums[i],min);
}
for(int i = 0;i<nums.length;i++){
count += nums[i] - min;
}
return count;
}
}複製代碼