The smallest and largest values can each move inward by k, so clamp their original difference minus two k at zero.
Complexity
O(n) time and O(1) space.
Minimize the range after independently changing every value by at most k.
The smallest and largest values can each move inward by k, so clamp their original difference minus two k at zero.
O(n) time and O(1) space.
package main
func smallestRangeI(nums []int, k int) int {
minimum, maximum := nums[0], nums[0]
for _, value := range nums[1:] {
if value < minimum {
minimum = value
}
if value > maximum {
maximum = value
}
}
result := maximum - minimum - 2*k
if result < 0 {
return 0
}
return result
}
class Solution:
def smallestRangeI(self, nums: list[int], k: int) -> int:
return max(0, max(nums) - min(nums) - 2 * k)
function smallestRangeI(nums: number[], k: number): number {
return Math.max(0, Math.max(...nums) - Math.min(...nums) - 2 * k);
}