Leetcode Java Smallest Range II
업데이트:
문제
코드
class Solution {
public int smallestRangeII(int[] nums, int k) {
Arrays.sort(nums);
int length = nums.length;
int max = nums[length - 1];
int min = nums[0];
int result = max - min;
for (int i = 0; i < length - 1; i++) {
max = Math.max(max, nums[i] + (k * 2));
min = Math.min(nums[i + 1], nums[0] + (k * 2));
result = Math.min(result, max - min);
}
return result;
}
}
결과
설명
-
지난 번 Smallest Range I과 유사하지만 이번에는 nums의 모든 값에 -k 혹은 k 값을 더했을 때, 최댓값과 최솟값의 차이가 가장 작은 값을 구하는 문제이다.
- nums를 오름차순으로 정렬하고, 문제 풀이에 필요한 변수를 정의한다.
- length는 nums의 길이를 저장한 변수이다.
- max와 min은 최댓값과 최솟값을 저장할 변수로, 정렬된 nums의 마지막 값인 가장 큰 값과 첫 값이 가장 작은 값으로 초기화한다.
- result는 결과를 저장할 변수로, 차이가 가장 큰 값인 max와 min의 차이로 초기화한다.
- 0부터 $length - 1$까지 i를 증가시키며 아래를 수행한다.
- max에 이전 값까지 가장 큰 값인 max와 nums의 i번째 값에 -k 혹은 k를 더했을 때 발생 가능한 최대 차이인 $k \times 2$를 더한 값 중 큰 값을 넣어준다.
- min에 다음 값인 nums의 $i + 1$번째 값과 nums의 첫 값에 위와 동일하게 $k \times 2$를 더한 값 중 작은 값을 넣어준다.
- result에 result와 $max - min$의 결과 중 작은 값을 넣어준다.
- 반복이 완료되면 최댓값과 최솟값의 차이가 가장 작은 값이 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기