453. 最小移動次數使陣列元素相等
阿新 • • 發佈:2020-10-28
一、題目
給定一個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動將會使 n - 1 個元素增加 1。
示例:
輸入:
[1,2,3]
輸出:
3
解釋:
只需要3次移動(注意每次移動會增加兩個元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
二、題解
n個數中,有n-1個數+1 等價於 第n個數-1
-
//[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4] //[1,2,3] => [1,2,2] => [1,2,1] => [1,1,1]
-
每次移動有1個數-1,最終陣列中所有值都為最小值
- 因此找到陣列中每個元素與最小值的差值之和,即為要移動的次數
- 如[5, 2, 1]中,5, 2與最小值1的差值為4,1因此要移動4+1次
優化——出現數值相等的情況,不移動,沒有值變化,因此可以跳過不用計算
class Solution { public int minMoves(int[] nums) { int count = 0; int min = nums[0]; for (int i = 1; i < nums.length; i++) { min = Math.min(min,nums[i]); } for (int i = nums.length-1; i >= 0 ; i--) { if (nums[i]>min) { count += (nums[i]-min); } } return count; } }
- 時間複雜度O(n)
- 空間複雜度O(1)
- 執行用時:2 ms, 在所有 Java 提交中擊敗了84.39%的使用者
- 記憶體消耗:38.9 MB, 在所有 Java 提交中擊敗了91.15%的使用者