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

示例 1:

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

示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

 

思路:

对元素进行排序   使用其的start属性进行排序  对于可以进行合并操作的两个元素  將第一个元素的end扩大  删掉第二个

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) {
		if(intervals.size() < 2)
			 return intervals;
		Collections.sort(intervals, new Comparator<Interval>() {
			@Override
			public int compare(Interval o1, Interval o2) {
				return o1.start - o2.start;
			}
		});
		int start = 0;
		Interval in1 = null, in2 = null;
		while (start < intervals.size() - 1) {
			in1 = intervals.get(start);
			in2 = intervals.get(start + 1);
			if (in2.start <= in1.end) {   //合并操作可以  將第一个元素的end扩大  删掉第二个
				in1.end = Math.max(in1.end, in2.end);
				intervals.remove(start + 1);
			} else
				start++;
		}
		return intervals;
	}