LeetCode:最少移動次數使得數組元素相等||【462】
阿新 • • 發佈:2018-08-30
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】