Smallest Range Ii
# https://leetcode.com/problems/smallest-range-ii/
# 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.
# Ex1:
# Input: nums = [1], k = 0
# Output: 0
# Explanation: The score is max(nums) - min(nums) = 1 - 1 = 0.
# Ex2:
# 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.
# Ex3:
# 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.
# [4, 3, 3]
def smallestRangeII(nums, k):
mn = min(nums)+k
mx = max(nums)-k
nums.sort()
n = len(nums)
res = max(nums)-min(nums)
for i in range(0, n-1):
high = max(nums[i]+k, mx)
low = min(nums[i+1]-k, mn)
res = min(res, high-low)
return res
def main():
# test
# Ex1: 0
nums = [1]
k = 0
print(smallestRangeII(nums, k))
# Ex2: 6
nums = [0,10]
k = 2
print(smallestRangeII(nums, k))
# Ex3: 3
nums = [1,3,6]
k = 3
print(smallestRangeII(nums, k))
if __name__ == "__main__":
main()```
Last updated