(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移動次數使數組元素相等
阿新 • • 發佈:2018-08-07
簡化 put 個數 equal require 就是 lan remember 邏輯
Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n - 1 elements by 1.
Example:
Input: [1,2,3] Output: 3 Explanation: Only three moves are needed (remember each move increments two elements): [1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
覺得和“算法”知識無關的簡單題反而有點難度啊……首先固定了每次都要使得n-1個元素+1,那麽這n-1個一定是最小的n-1個,否則就會越加越多。每次都找最小的n-1個去加,直到所有的數相等。換個角度,就等於每次找到最大的那個數使得其-1,直到最大和最小的數相等。最終,所有比最小的那個數大的數,都要變成最小的數。所以,結果就是求所有數與最小數差的和。即,所有數的和與最小數與數組長度乘積的差。本題就是個邏輯推理和數學式的簡化。感覺算法有的時候就是數學競賽啊……
Java
class Solution { public int minMoves(int[] nums) {int min = nums[0], sum = 0; for (int num : nums) { if (num < min) min = num; sum += num; } return sum - nums.length * min; } }
(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移動次數使數組元素相等