You are given a 0-indexed integer array nums
.
- The low score of
nums
is the minimum value of|nums[i] - nums[j]|
over all0 <= i < j < nums.length
. - The high score of
nums
is the maximum value of|nums[i] - nums[j]|
over all0 <= i < j < nums.length
. - The score of
nums
is the sum of the high and low scores of nums.
To minimize the score of nums
, we can change the value of at most two elements of nums
.
Return the minimum possible score after changing the value of at most two elements of nums
.
Note that |x|
denotes the absolute value of x
.
Example 1:
Input: nums = [1,4,3]
Output: 0
Explanation: Change value of nums[1] and nums[2] to 1 so that nums becomes [1,1,1]. Now, the value of |nums[i] - nums[j]|
is always equal to 0, so we return 0 + 0 = 0.
Example 2:
Input: nums = [1,4,7,8,5] Output: 3 Explanation: Change nums[0] and nums[1] to be 6. Now nums becomes [6,6,7,8,5]. Our low score is achieved when i = 0 and j = 1, in which case |nums[i] - nums[j]
| = |6 - 6| = 0. Our high score is achieved when i = 3 and j = 4, in which case |nums[i] - nums[j]
| = |8 - 5| = 3. The sum of our high and low score is 3, which we can prove to be minimal.
Constraints:
3 <= nums.length <= 105
1 <= nums[i] <= 109
class Solution:
def minimizeSum(self, nums: List[int]) -> int:
nums.sort()
return min(nums[-1] - nums[2], nums[-2] - nums[1], nums[-3] - nums[0])
class Solution {
public int minimizeSum(int[] nums) {
Arrays.sort(nums);
int n = nums.length;
int a = nums[n - 1] - nums[2];
int b = nums[n - 2] - nums[1];
int c = nums[n - 3] - nums[0];
return Math.min(a, Math.min(b, c));
}
}
class Solution {
public:
int minimizeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
int n = nums.size();
return min({nums[n - 1] - nums[2], nums[n - 2] - nums[1], nums[n - 3] - nums[0]});
}
};
func minimizeSum(nums []int) int {
sort.Ints(nums)
n := len(nums)
return min(nums[n-1]-nums[2], min(nums[n-2]-nums[1], nums[n-3]-nums[0]))
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
function minimizeSum(nums: number[]): number {
nums.sort((a, b) => a - b);
const n = nums.length;
return Math.min(nums[n - 3] - nums[0], nums[n - 2] - nums[1], nums[n - 1] - nums[2]);
}
impl Solution {
pub fn minimize_sum(mut nums: Vec<i32>) -> i32 {
nums.sort();
let n = nums.len();
(nums[n - 1] - nums[2])
.min(nums[n - 2] - nums[1])
.min(nums[n - 3] - nums[0])
}
}
#define min(a, b) (((a) < (b)) ? (a) : (b))
int cmp(const void* a, const void* b) {
return *(int*) a - *(int*) b;
}
int minimizeSum(int* nums, int numsSize) {
qsort(nums, numsSize, sizeof(int), cmp);
return min(nums[numsSize - 1] - nums[2], min(nums[numsSize - 2] - nums[1], nums[numsSize - 3] - nums[0]));
}