Сложность: medium
Вам дан целочисленный массив nums и целое число k. Для каждого индекса i, где 0 <= i < nums.length, измените nums[i] на nums[i] + k или nums[i] - k. Оценка nums - это разница между максимальным и минимальным элементами в nums. Верните минимальную оценку nums после изменения значений в каждом индексе.
Пример:
Input: nums = [1], k = 0
Output: 0
👨💻 Алгоритм:
1⃣Отсортировать массив nums.
2⃣Рассчитать начальную разницу между максимальным и минимальным элементами.
3⃣Пройтись по всем элементам массива, пытаясь минимизировать разницу, изменяя текущий элемент на +k и -k и вычисляя новые максимальные и минимальные значения массива.
😎 Решение:
import java.util.Arrays;
class Solution {
public int smallestRangeII(int[] nums, int k) {
Arrays.sort(nums);
int n = nums.length;
int minVal = nums[0];
int maxVal = nums[n - 1];
int result = maxVal - minVal;
for (int i = 0; i < n - 1; i++) {
int high = Math.max(nums[i] + k, maxVal - k);
int low = Math.min(nums[i + 1] - k, minVal + k);
result = Math.min(result, high - low);
}
return result;
}
}
Ставь 👍 и забирай 📚 Базу знаний