(Interval, Medium) Non-overlapping Intervals

송재호·2025년 8월 7일
0

https://leetcode.com/problems/non-overlapping-intervals/description/

최소한으로 제거하는게 목적이기 때문에 end 기준으로 배열을 정렬하는게 중요하다.
start 기준으로 했을 경우 [1,10], [2,3], [4,5], [6,7] 이런 케이스에서 문제가 될 수 있다.

이 경우 end기준 정렬하면 1개([1,10])만 제거하면 되는데,
start 기준 정렬하면 3개([2,3], [4,5], [6,7])를 제거해야 할 수 있기 때문이다.

정렬을 시켜뒀으면 기준값을 잡고 또 index 1부터 순회할 수 있겠다.
정렬된 배열대로 순회하기 때문에 현재 순회 요소의 start가 이전 요소의 end보다 작다면 제거 대상이다 (겹침)

이 조건을 만족하지 않는 경우 기준값을 갱신해나가면 된다.

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        Arrays.sort(intervals, (a, b) -> Integer.compare(a[1], b[1]));

        int count = 0;
        int end = intervals[0][1];

        for (int i=1; i<intervals.length; i++) {
            int[] current = intervals[i];
            if (current[0] < end) {
                count++;
            } else {
                end = current[1];
            }
        }

        return count;
    }
}
profile
식지 않는 감자

0개의 댓글