YSMull
<-- home

数组日经题总结

56.合并区间

按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的,最是在最后面的区间合并

class Solution {
    public int[][] merge(int[][] intervals) {
        List<int[]> res = new ArrayList<>();
        // 这个别忘了写法
        Arrays.sort(intervals, (int[] a, int[] b) -> a[0] - b[0]);
        for (int i = 0; i < intervals.length; i++) {
            if (res.size() == 0) {
                res.add(intervals[i]);
            } else {
                int l = intervals[i][0];
                int r = intervals[i][1];
                int lastl = res.get(res.size() - 1)[0];
                int lastr = res.get(res.size() - 1)[1];
                if (l > lastr) {
                    res.add(intervals[i]);
                } else {
                    // [[1,4] [2,3]],左边界一定用上一个区间的,右边界要比较下,用较大的
                    res.set(res.size() - 1, new int[]{lastl, Math.max(lastr, r)});
                }
            }
        }
        // 这个也别忘了写法
        return res.toArray(new int[res.size()][]);
    }
}