56. Merge Intervals

O(nlogn), O(n)

class Solution {
    public int[][] merge(int[][] intervals) {
        if(intervals == null || intervals.length == 0) return intervals;
        Arrays.sort(intervals, (a, b) -> a[0] - b[0]);
        
        List<int[]> result = new ArrayList<>();
        int start = intervals[0][0];
        int end = intervals[0][1];
        
        for (int interval[] : intervals) {
        // 這裡會是第一個元素先近來, 也沒差(預設s e 第一個元素
        // 跑完還是會第一個元素的 s e
            if (end >= interval[0]) { 
                end = Math.max(end, interval[1]); // for this case [[1,4],[2,3]]
            } else {
                result.add(new int[]{start, end});
                start = interval[0];
                end = interval[1];
            }
        }
        // 最後還要加上最後的 s e
        result.add(new int[]{start, end});
        
        return result.toArray(new int[result.size()][]);
    }
}

本題主要核心當然是

s1 e1

s2 e2

if s >= e 時 do merge(update end)

但是是用 start end 來表示

else

add data(to List), update start, end

注意 array sort

注意最後還要加

和 list 如何轉 array

newest version

Last updated

Was this helpful?