DEV Community

Cover image for 1509. Minimum Difference Between Largest and Smallest Value in Three Moves
MD ARIFUL HAQUE
MD ARIFUL HAQUE

Posted on

1509. Minimum Difference Between Largest and Smallest Value in Three Moves

1509. Minimum Difference Between Largest and Smallest Value in Three Moves

Medium

You are given an integer array nums.

In one move, you can choose one element of nums and change it to any value.

Return the minimum difference between the largest and smallest value of nums after performing at most three moves.

Example 1:

  • Input: nums = [5,3,2,4]
  • Output: 0
  • Explanation: We can make at most 3 moves.
  In the first move, change 2 to 3. nums becomes [5,3,3,4].
  In the second move, change 4 to 3. nums becomes [5,3,3,3].
  In the third move, change 5 to 3. nums becomes [3,3,3,3].
  After performing 3 moves, the difference between the minimum and maximum is 3 - 3 = 0.
Enter fullscreen mode Exit fullscreen mode

Example 2:

  • Input: nums = [1,5,0,10,14]
  • Output: 1
  • Explanation: We can make at most 3 moves.
  In the first move, change 5 to 0. nums becomes [1,0,0,10,14].
  In the second move, change 10 to 0. nums becomes [1,0,0,0,14].
  In the third move, change 14 to 1. nums becomes [1,0,0,0,1].
  After performing 3 moves, the difference between the minimum and maximum is 1 - 0 = 1.
  It can be shown that there is no way to make the difference 0 in 3 moves.
Enter fullscreen mode Exit fullscreen mode

Example 3:

  • Input: nums = [3,100,20]
  • Output: 0
  • Explanation: We can make at most 3 moves.
  In the first move, change 100 to 7. nums becomes [3,7,20].
  In the second move, change 20 to 7. nums becomes [3,7,7].
  In the third move, change 3 to 7. nums becomes [7,7,7].
  After performing 3 moves, the difference between the minimum and maximum is 7 - 7 = 0.
Enter fullscreen mode Exit fullscreen mode

Constraints:

  • 1 <= nums.length <= 105
  • -109 <= nums[i] <= 109

Solution:

class Solution {

    /**
     * @param Integer[] $nums
     * @return Integer
     */
    function minDifference($nums) {
        $n = count($nums);

        // If the array has 4 or fewer elements, the difference is zero because we can remove all but one element.
        if ($n <= 4) {
            return 0;
        }

        // Sort the array to facilitate the calculation of differences after removals.
        sort($nums);

        // We consider removing 0, 1, 2, or 3 elements from the start or the end.
        // Calculate the differences:
        // 1. Remove 3 from start: nums[n-1] - nums[3]
        // 2. Remove 2 from start, 1 from end: nums[n-2] - nums[2]
        // 3. Remove 1 from start, 2 from end: nums[n-3] - nums[1]
        // 4. Remove 3 from end: nums[n-4] - nums[0]
        $differences = [
            $nums[$n - 1] - $nums[3],
            $nums[$n - 2] - $nums[2],
            $nums[$n - 3] - $nums[1],
            $nums[$n - 4] - $nums[0]
        ];

        // Return the minimum difference.
        return min($differences);
    }
}
Enter fullscreen mode Exit fullscreen mode

Contact Links

Top comments (0)