- 배열문제
https://leetcode.com/problems/minimum-difference-between-largest-and-smallest-value-in-three-moves/description/?envType=daily-question&envId=2024-07-03
- 문제분석
1. int[] nums 배열 중, 3개 element 를 교체할 수 있다.
2. 그 결과 배열의 최대값 - 최소값 이 가장 적은 수를 리턴해라.
- 문제풀이
1. int[] nums 배열을 오름차순으로 정렬한다.
1-1. Arrays.sort() 함수 사용
2. 이때, 3개 element 미교체시 가장 작은 수는 0번째 인덱스이며, 가장 큰 수는 nums.length-1 인덱스이다.
3. 3개 element 를 교체할 경우 가장 최적의 해를 구한다.
3-1. nums.length-1 값이 가장 큰 수이므로 nums.length-3 부터 nums.length-1 까지 교체한다.
3-2. 이때 가장 작은수는 nums[0], nums[nums.length-4] 이다.
3-3. 최대 경우의 수는 nums[3] 부터 nums[nums.length-1] 까지이다.
4. 해당 경우의 수를 수식으로 정리한다.
//0 vs nums.length-4
//1 vs nums.length-3
//2 vs nums.length-2
//3 vs nums.length-1
4-1. i 가 1 늘어 날때마다 nums.length-(4-i) 만큼 감소한다.
4-2. 이때 가장 작은 수를 Math.min 함수로 리턴한다.
class Solution {
public int minDifference(int[] nums) {
if (nums.length <= 4) {
return 0;
}
Arrays.sort(nums);
int min = nums[nums.length-1] - nums[0];
for(int i = 0; i < 4; i++) {
int front = nums[i];
int back = nums[nums.length-(4-i)];
min = Math.min(min, Math.abs(front-back));
}
return min;
}
}
'TIL' 카테고리의 다른 글
[코테연습] 2058. Find the Minimum and Maximum Number of Nodes Between Critical Points (1) | 2024.07.05 |
---|---|
[코테연습] 2181. Merge Nodes in Between Zeros (0) | 2024.07.04 |
[코테연습] 350. Intersection of Two Arrays II (0) | 2024.07.02 |
[코테연습] 1579. Remove Max Number of Edges to Keep Graph Fully Traversable (0) | 2024.07.01 |
[코테연습] 1550. Three Consecutive Odds (0) | 2024.07.01 |