剑指 Offer II 074. 合并区间

算法记录

LeetCode 题目:

  以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。



说明

一、题目

  输入:intervals = [[1,3],[2,6],[8,10],[15,18]]
  输出:[[1,6],[8,10],[15,18]]
  解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

二、分析

  • 没有啥算法上面的难点,关键是考验编码能力,将包含的情况分析完之后就可以了。
class Solution {
    
    
    public int[][] merge(int[][] intervals) {
    
    
        Arrays.sort(intervals, new Comparator<int[]>() {
    
    
            @Override
            public int compare(int[] o1, int[] o2) {
    
    
                return o1[0] - o2[0];
            }
        });
        List<int[]> res = new ArrayList();
        for(int i = 0; i < intervals.length; i++) {
    
    
            int t = intervals[i][0], k = intervals[i][1], j = i + 1;
            while(j < intervals.length && k >= intervals[j][0]) {
    
    
                k = Math.max(k, intervals[j][1]);
                j++;
            }
            i = j - 1;
            res.add(new int[]{
    
    t, k});
        }
        int[][] ans = new int[res.size()][];
        for(int i = 0; i < ans.length; i++) ans[i] = res.get(i);
        return ans;
    }
}

总结

注意列表和数组的转换。

Guess you like

Origin blog.csdn.net/MTYSYS19990212/article/details/120539171