문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음
정수 배열 nums와 정수 k가 주어진다.
한 번의 연산으로 0 <= i < nums.length인 임의의 인덱스 i를 선택하고 nums[i]를 nums[i] + x로 변경할 수 있다. x는 [-k, k] 범위의 정수이다. 각 인덱스 i에 대해 이 연산을 최대 한 번만 적용할 수 있다.
nums의 점수는 nums에서 가장 큰 요소와 가장 작은 요소의 차이이다.
상기 연산을 nums의 각 인덱스에 대해 최대 한 번씩 적용한 후, nums의 최소 점수를 반환해라.
#1
Input: nums = [1], k = 0
Output: 0
Explanation: 점수는 max(nums) - min (nums) = 1 - 1 = 0이다.
#2
Input: nums = [0, 10], k = 2
Output: 6
Explanation: nums를 [2, 8]로 바꿔라. 점수는 max(nums) - min(nums) = 8 - 2 = 6이다.
#3
Input: nums = [1, 3, 6], k = 3
Output: 0
Explanation: nums를 [4, 4, 4]로 바꿔라. 점수는 max(nums) - min(nums) = 4 - 4 = 0이다.
class Solution {
public int smallestRangeI(int[] nums, int k) {
int max = nums[0];
int min = nums[0];
for(int num : nums){
max = Math.max(max, num);
min = Math.min(min, num);
}
return Math.max(0, max - min - 2 * k);
}
}