https://leetcode.com/problems/removing-minimum-and-maximum-from-array/
배열에서 최댓값과 최솟값을 찾은 뒤, 앞(or 뒤)에서 최댓값(최솟값) 위치까지 모든 원소를 지워야 한다.
이 때, 지우는 원소의 개수를 최소로 하는 정답을 구해야 한다.
배열의 길이가 2 이상일 경우, 원소를 지울 수 있는 방법은 세 가지가 있다.
위의 세 가지 방법 중, 가장 적게 지우는 경우를 찾아서 리턴하면 된다!
class Solution {
int findMinDel(int length, int smallIdx, int bigIdx) {
int result = 9999999;
result = Math.min(result, bigIdx + 1);
result = Math.min(result, length - smallIdx);
result = Math.min(result, smallIdx + 1 + length - bigIdx);
return result;
}
public int minimumDeletions(int[] nums) {
int length = nums.length;
if(length <= 2){
return length;
}
int max = nums[0];
int min = nums[0];
int maxIdx = 0, minIdx = 0;
for(int i = 0; i < length; i++) {
if(max < nums[i]) {
max = nums[i];
maxIdx = i;
}
if(min > nums[i]) {
min = nums[i];
minIdx = i;
}
}
int smallIdx = Math.min(minIdx, maxIdx);
int bigIdx = Math.max(minIdx, maxIdx);
int answer = findMinDel(length, smallIdx, bigIdx);
return answer;
}
}
https://leetcode.com/submissions/detail/593807237/
https://github.com/sorious77/LeetCode/blob/main/code/2091.java