题目:合并区间
思路:
- 首先,对所有区间按照第一个数升序排列;
- 把第一个区间放入结果集,接着遍历剩下的元素:
如果当前遍历的元素的左值,大于结果集最后一个元素的右值,那么二者必然不能合并,把当前元素加入结果集;
否则,二者可以合并,右值取二者右值更大的一个即可。
代码:
import java.util.*;
/**
* 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 class Solution {
public ArrayList<Interval> merge(ArrayList<Interval> intervals) {
if (intervals.size() == 0) {
return new ArrayList<Interval>();
}
Collections.sort(intervals, new Comparator<Interval>(){
public int compare(Interval o1, Interval o2) {
return o1.start - o2.start;
}
});
ArrayList<Interval> array = new ArrayList<Interval>();
for (Interval in : intervals) {
if (array.size() == 0) {
array.add(in);
}
else {
Interval cur = array.get(array.size() - 1);
if (in.start > cur.end) {
array.add(in);
}
else {
cur.end = Math.max(cur.end, in.end);
}
}
}
return array;
}
}