题目地址:https://oj.leetcode.com/problems/merge-intervals/
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]
.
实现思路:先对区间进行排序,然后进行重叠判断。
/**
* 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; }
* }
*/
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
public class Solution {
public List<Interval> merge(List<Interval> intervals) {
if(intervals.size()<2){
return intervals;
}
Collections.sort(intervals,new IntervalComparator());
List<Interval> ans = new LinkedList<>();
ans.add(intervals.get(0));
for(int i=1;i<intervals.size();i++){
Interval lastInterval = ans.get(ans.size()-1);
Interval currentInterval = intervals.get(i);
if(currentInterval.start<= lastInterval.end){
if(currentInterval.end>lastInterval.end){
lastInterval.end = currentInterval.end;
ans.remove(ans.size()-1);
ans.add(lastInterval);
}
}else {
ans.add(currentInterval);
}
}
return ans;
}
class IntervalComparator implements Comparator<Interval>{
@Override
public int compare(Interval o1, Interval o2) {
// 需要按照从小到大顺序排序
if(o1.start<o2.start){
return -1;
}else if(o1.start>o2.start){
return 1;
}
else {
if(o1.end<o2.end){
return -1;
}else if(o1.end>o2.end){
return 1;
}else {
return 0;
}
}
}
}
}