Сложность: 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 и вычисляя новые максимальные и минимальные значения массива.
😎 Решение:
function smallestRangeII($nums, $k) {
sort($nums);
$n = count($nums);
$minVal = $nums[0];
$maxVal = $nums[$n - 1];
$result = $maxVal - $minVal;
for ($i = 0; $i < $n - 1; $i++) {
$high = max($nums[$i] + $k, $maxVal - $k);
$low = min($nums[$i + 1] - $k, $minVal + $k);
$result = min($result, $high - $low);
}
return $result;
}Ставь 👍 и забирай 📚 Базу знаний