(Java) LeetCode 56. Merge Intervalse —— 合并区间
Posted tengdai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了(Java) LeetCode 56. Merge Intervalse —— 合并区间相关的知识,希望对你有一定的参考价值。
Given a collection of intervals, merge all overlapping intervals.
Example 1:
Input: [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].
Example 2:
Input: [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considerred overlapping.
这道题看例子就观察到如果是按照区间最小值排过序的话会比较好做,不然的话找来找去复杂度应该会很高吧,排过序最多也就是O(nlogn)。排序之后就比较好想了,如果后一个区间的起始比前一个区间的最后要小,那证明有覆盖,这时需要合并区间。合并还要看一下前后区间的末尾的情况,要取更大的那个作为合并后的末尾。如果后一个区间的起始没有覆盖前一个区间的末尾,那么就是一个新的区间。把之前的区间存到结果里面,并继续寻找新区间就好。
Java
/** * 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; } * } */ class Solution { public List<Interval> merge(List<Interval> intervals) { int len = intervals.size(); if (len <= 1) return intervals; Collections.sort(intervals, new cmp()); List<Interval> res = new ArrayList<Interval>(); int start = intervals.get(0).start, end = intervals.get(0).end; for (int i = 1; i < len; i++) { if (intervals.get(i).start <= end) { end = end > intervals.get(i).end ? end : intervals.get(i).end; } else { res.add(new Interval(start, end)); start = intervals.get(i).start; end = intervals.get(i).end; } } res.add(new Interval(start, end)); return res; } class cmp implements Comparator<Interval> { public int compare(Interval i1, Interval i2) { return i1.start - i2.start; } } }
以上是关于(Java) LeetCode 56. Merge Intervalse —— 合并区间的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode] 56. Merge Intervals Java
(Java) LeetCode 56. Merge Intervalse —— 合并区间
LeetCode第[56]题(Java):Merge Intervals