All Downloads are FREE. Search and download functionalities are using the official Maven repository.

g0901_1000.s0910_smallest_range_ii.Solution Maven / Gradle / Ivy

There is a newer version: 1.38
Show newest version
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