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.
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.
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.
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);
}
}
Contact Links
If you found this series helpful, please consider giving the repository a star on GitHub or sharing the post on your favorite social networks 😍. Your support would mean a lot to me!
If you want more helpful content like this, feel free to follow me: