LeetCode - 2091

이정우·2021년 11월 28일
1

LeetCode

목록 보기
4/7

2091. Removing Minimum and Maximum From Array

https://leetcode.com/problems/removing-minimum-and-maximum-from-array/

배열에서 최댓값과 최솟값을 찾은 뒤, 앞(or 뒤)에서 최댓값(최솟값) 위치까지 모든 원소를 지워야 한다.

이 때, 지우는 원소의 개수를 최소로 하는 정답을 구해야 한다.


배열의 길이가 2 이상일 경우, 원소를 지울 수 있는 방법은 세 가지가 있다.

  1. 0 ~ 큰 인덱스
  2. length ~ 작은 인덱스
  3. 0 ~ 작은 인덱스 + length ~ 큰 인덱스

위의 세 가지 방법 중, 가장 적게 지우는 경우를 찾아서 리턴하면 된다!


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

0개의 댓글