56. Merge Intervals
来源:互联网 发布:最大的整型数据 编辑:程序博客网 时间:2024/05/17 02:31
Given a collection of intervals, merge all overlapping intervals.
For example,
Given [1,3],[2,6],[8,10],[15,18],
return [1,6],[8,10],[15,18].
思路:
无需对各个区间排序,只需要将需要合并的区间合并起来即可。如果经过判断是独立的区间,则将该区间加入结果集,如果不是独立的区间,则将该区间合并至后续的区间并继续判断下一个区间在剩余的区间中是否是独立的区间。
举个例子,输入为[1,3],[5,6],[10,11],[2,7],
先判断[1,3]是否是独立区间,可见[1,3]可以和[2,7]合并,则将[2,7]修改为[1,7]。
接着判断[5,6]是否可以合并至后面的区间,发现需要将[5,6]与[1,7]合并,合并为[1,7]。
最后,还剩下[10,11]和[1,7]可以先后加入结果集。
/** * 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 size = intervals.size(); if (size < 2) { return intervals; } List<Interval> result = new ArrayList<Interval>(size); Interval[] array = intervals.toArray(new Interval[size]); for (int f = 0; f < size; f++) { Interval first = array[f]; boolean add = true; for (int s = f + 1; s < size; s++) { Interval second = array[s]; if (first.end < second.start || first.start > second.end) { continue; } if (first.start <= second.start) { second.start = first.start; } if (first.end >= second.end) { second.end = first.end; } add = false; break; } if (add) { result.add(first); } } return result; }}
阅读全文