56. 合并区间 - LeetCode

56. 合并区间

题目链接

自定义比较器排序

  • 按照左端点排序,若与前一个区间不重叠,则加入list
  • 若与前一个区间重叠,则用右端点去更新前一个区间的右端点
  • 注意:
    • 自定义比较器需要传入Comparator对象,并且重写compare方法,第一个参数比第二个参数大时,返回正数
    • List转数组时,需要传入对应类型的数组作为参数,来存储结果
class Solution {
    public int[][] merge(int[][] intervals) {
        int len = intervals.length;
        if (len == 0) return new int [0][2];
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });
        List<int[]> ans = new ArrayList<>();
        for (int[] interval: intervals) {
            int L = interval[0], R = interval[1];
            if (ans.isEmpty() || ans.get(ans.size() - 1)[1] < L) 
                ans.add(new int[]{L, R});
            else ans.get(ans.size() - 1)[1] = Math.max(ans.get(ans.size() - 1)[1], R);
        }
        return ans.toArray(new int[ans.size() - 1][]);
    }
}
posted @ 2021-03-15 09:25  一天到晚睡觉的鱼  阅读(45)  评论(0编辑  收藏  举报