56. 合并区间

2022-10-26 17:52:57 浏览数 (1)

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

代码语言:javascript复制
输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:

代码语言:javascript复制
输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

解:题目不难,注意会出现[[1,8],[4,5]…]这种情况,比较特殊用Math.max比较一下

代码语言:javascript复制
/**
 * Definition for an interval.
 * public class Interval {
 *     int start;
 *     int end;
 *     Interval() { start = 0; end = 0; }
 *     Interval(int s, int e) { start = s; end = e; }
 * }
 */
public List<Interval> merge(List<Interval> intervals) {

        List<Interval> rtn = new ArrayList<>();
        if (intervals == null || intervals.size() == 0) {
            return rtn;
        }
        Collections.sort(intervals, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Interval i1 = (Interval) o1;
                Interval i2 = (Interval) o2;
                if (i1.start < i2.start) {
                    return -1;
                } else if (i1.start > i2.start) {
                    return 1;
                } else {
                    if (i1.end < i2.end) {
                        return -1;
                    } else if (i1.end > i2.end) {
                        return 1;
                    }
                }
                return 0;
            }
        });

        Interval intervalPre = intervals.get(0);

        for (int i = 1; i < intervals.size(); i  ) {
            Interval interval = intervals.get(i);
            if (intervalPre.end < interval.start) {
                rtn.add(new Interval(intervalPre.start, intervalPre.end));
                intervalPre = interval;
            } else {
                intervalPre.end = Math.max(interval.end, intervalPre.end);
            }
        }
        rtn.add(intervalPre);
        return rtn;
    }

0 人点赞