LeetCode每日一題: 最小移動次數使數組元素相等(No.453)

題目:最小移動次數使數組元素相等


給定一個長度爲 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;
}
}複製代碼
相關文章
相關標籤/搜索