Minimum Moves to Equal Array Elements

Problem

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]

Solution

public class Solution {
    public int minMoves(int[] nums) {
        int min = Integer.MAX_VALUE;
        for (int num : nums) min = Math.min(min, num);
        int moves = 0;
        for (int num : nums) moves += num - min; 
        return moves;
    }
}

Analysis

A move in this problem is incrementing n - 1 elements by 1
It is completely equivalent to decreasing 1 (n - (n-1) = 1) element by 1 In this situation, the problem becomes very easy to solve
We just find the min in given nums in the first loop
And get difference between min and each element in nums in the second loop
Sometimes we just need to think in a opposite way ;)

Complexity

  • Time: O(n), where n the length of nums
  • Space: O(1), only constant space is used

results matching ""

    No results matching ""