56. Merge Intervals

intervals[i] = [starti, endi]인 간격 배열이 주어지면, 모든 겹치는 간격을 병합하고 입력의 모든 간격을 포함하는 겹치지 않는 간격의 배열을 반환

56. Merge Intervals

시작값을 기준으로 정렬 후

class Solution {
    // Time : O(nlogn)
    // Space: O(n)
    public int[][] merge(int[][] intervals) {
        List<int[]> merged = new ArrayList<>();
        
        // 시작값을 기준으로 오름차순으로 정렬
        // Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
        
        int[] last = null;
        for (int[] interval : intervals) {
            // 오버랩인 경우: 종료값이 시작값보다 크면 (end > start)
            if (last != null && last[1] >= interval[0]) {  
                // 종료지점을 큰 값으로 갱신
                last[1] = Math.max(last[1], interval[1]);
            // 오버랩 아닌 경우: 마지막 셀을 갱신하고 현재 셀을 병합리스트에 추가
            } else { 
                last = interval;
                merged.add(interval);
            }
        }
        
        return merged.toArray(new int[merged.size()][]);
    }
}





© 2017. by yeopoong.github.io

Powered by yeopoong