1. 程式人生 > >LeetCode:最少移動次數使得數組元素相等||【462】

LeetCode:最少移動次數使得數組元素相等||【462】

true 移動 邏輯 描述 假設 ++i 動作 數組元素 brush

LeetCode:最少移動次數使得數組元素相等||【462】

題目描述

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

例如:

輸入:
[1,2,3]

輸出:
2

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

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

題目分析

  一個直觀的理解是這樣的,如果我們只有兩個數字的話,那麽我們使得他們變成相等元素的最少步數是多少呢?當然是兩者的差

  我們知道兩者的差就已經夠了,至於把它們變成什麽樣子其實不影響結果

。比如1,5,若兩者相等,可以變成5,5、4,4、1,1等等,步數都是4步,即差。

  我們只是將這個邏輯應用到排序數組的兩個極端元素中。一旦我們相等(不需要顯式地設置,因為我們只是在計算),我們就拋棄了這兩個外部,向內移動。

Java題解

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

LeetCode:最少移動次數使得數組元素相等||【462】