Skip to content

2567. Minimum Score by Changing Two Elements

  • Time: $O(\texttt{sort})$
  • Space: $O(\texttt{sort})$
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
class Solution {
 public:
  int minimizeSum(vector<int>& nums) {
    ranges::sort(nums);
    // Can always change the number to any other number in `nums`, so `low`
    // becomes 0. Thus, rephrase the problem as finding the minimum `high`.
    const int n = nums.size();
    const int highOfChangingTwoMins = nums.back() - nums[2];
    const int highOfChangingTwoMaxs = nums[n - 3] - nums[0];
    const int highOfChangingMinAndMax = nums[n - 2] - nums[1];
    return min({highOfChangingTwoMins, highOfChangingTwoMaxs,
                highOfChangingMinAndMax});
  }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
class Solution {
  public int minimizeSum(int[] nums) {
    Arrays.sort(nums);
    // Can always change the number to any other number in `nums`, so `low` becomes 0.
    // Thus, rephrase the problem as finding the minimum `high`.
    final int n = nums.length;
    final int highOfChangingTwoMins = nums[n - 1] - nums[2];
    final int highOfChangingTwoMaxs = nums[n - 3] - nums[0];
    final int highOfChangingMinAndMax = nums[n - 2] - nums[1];
    return Math.min(Math.min(highOfChangingTwoMins, highOfChangingTwoMaxs),
                    highOfChangingMinAndMax);
  }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution:
  def minimizeSum(self, nums: List[int]) -> int:
    nums.sort()
    # Can always change the number to any other number in `nums`, so `low` becomes 0.
    # Thus, rephrase the problem as finding the minimum `high`.
    highOfChangingTwoMins = nums[-1] - nums[2]
    highOfChangingTwoMaxs = nums[-3] - nums[0]
    highOfChangingMinAndMax = nums[-2] - nums[1]
    return min(highOfChangingTwoMins, highOfChangingTwoMaxs,
               highOfChangingMinAndMax)