g0901_1000.s0910_smallest_range_ii.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0901_1000.s0910_smallest_range_ii;
// #Medium #Array #Math #Sorting #Greedy #Programming_Skills_II_Day_13
// #2022_03_28_Time_10_ms_(73.16%)_Space_49.6_MB_(38.97%)
import java.util.Arrays;
/**
* 910 - Smallest Range II\.
*
* Medium
*
* You are given an integer array `nums` and an integer `k`.
*
* For each index `i` where `0 <= i < nums.length`, change `nums[i]` to be either `nums[i] + k` or `nums[i] - k`.
*
* The **score** of `nums` is the difference between the maximum and minimum elements in `nums`.
*
* Return _the minimum **score** of_ `nums` _after changing the values at each index_.
*
* **Example 1:**
*
* **Input:** nums = [1], k = 0
*
* **Output:** 0
*
* **Explanation:** The score is max(nums) - min(nums) = 1 - 1 = 0.
*
* **Example 2:**
*
* **Input:** nums = [0,10], k = 2
*
* **Output:** 6
*
* **Explanation:** Change nums to be [2, 8]. The score is max(nums) - min(nums) = 8 - 2 = 6.
*
* **Example 3:**
*
* **Input:** nums = [1,3,6], k = 3
*
* **Output:** 3
*
* **Explanation:** Change nums to be [4, 6, 3]. The score is max(nums) - min(nums) = 6 - 3 = 3.
*
* **Constraints:**
*
* * 1 <= nums.length <= 104
* * 0 <= nums[i] <= 104
* * 0 <= k <= 104
**/
public class Solution {
public int smallestRangeII(int[] nums, int k) {
Arrays.sort(nums);
int n = nums.length;
int ans = nums[n - 1] - nums[0];
int min = nums[0] + k;
int max = nums[n - 1] - k;
for (int i = 0; i < n - 1; i++) {
int mx = Math.max(max, nums[i] + k);
int mi = Math.min(min, nums[i + 1] - k);
ans = Math.min(ans, mx - mi);
}
return ans;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy