leetcode 1509 - Minimum Difference Between Largest and Smallest Value in Three Moves

https://leetcode.com/problems/minimum-difference-between-largest-and-smallest-value-in-three-moves/

Given an array nums, you are allowed to choose one element of nums and change it by any value in one move.

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

Example 1:

Input: nums = [5,3,2,4]
Output: 0
Explanation: Change the array [5,3,2,4] to [2,2,2,2].
The difference between the maximum and minimum is 2-2 = 0.
Example 2:

Input: nums = [1,5,0,10,14]
Output: 1
Explanation: Change the array [1,5,0,10,14] to [1,1,0,1,1].
The difference between the maximum and minimum is 1-0 = 1.
Example 3:

Input: nums = [6,6,0,1,1,4,6]
Output: 2
Example 4:

Input: nums = [1,5,6,14,15]
Output: 1

Constraints:

1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//O(NlogN)
class Solution {
public:
int minDifference(vector<int>& nums) {
if (nums.size() <= 3) return 0;

sort(nums.begin(), nums.end());
int n = nums.size();

//remove 3 smallest
int diff1 = nums[n-1] - nums[3];

//remove 3 largest
int diff2 = nums[n-4] - nums[0];

//remove 1 smallest, 2 largest
int diff3 = nums[n-3] - nums[1];

//remove 2 smallest, 1 largest
int diff4 = nums[n-2] - nums[2];

return min(min(min(diff1, diff2), diff3), diff4);
}
};