1. 程式人生 > >(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移動次數使數組元素相等

(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移動次數使數組元素相等

簡化 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 —— 最小移動次數使數組元素相等