1. 程式人生 > >462. 最少移動次數使陣列元素相等 II

462. 最少移動次數使陣列元素相等 II

給定一個非空整數陣列,找到使所有陣列元素相等所需的最小移動數,其中每次移動可將選定的一個元素加1或減1。 您可以假設陣列的長度最多為10000。

例如:

輸入:
[1,2,3]

輸出:
2

說明:
只有兩個動作是必要的(記得每一步僅可使其中一個元素加1或減1): 

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

一個想法就是上大的數減小,小的數增加,直到他們都等於中間值。

1. 首先對陣列進行排序

2. 找到中間值mid

3. 遍歷陣列,求nums[i]-mid的和

由於不保證陣列元素個數為奇數個,因此不一定存在中間值。通用解法如下:

1. 首先對陣列進行排序

2. 首尾數字兩兩配對,求出它們差值的和。

class Solution {
    public int minMoves2(int[] nums) {
        Arrays.sort(nums);
        int sum = 0;
        int i = 0;
        int j = nums.length-1;
        while (i<j) {
            sum+=nums[j]-nums[i];
            j--;
            i++;
        }
        return sum;
    }
}