原题网址:https://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; }
* }
*/
public class Solution {
public List<Interval> merge(List<Interval> intervals) {
Collections.sort(intervals, new Comparator<Interval>() {
@Override
public int compare(Interval i1, Interval i2) {
return Integer.compare(i1.start, i2.start);
}
});
List<Interval> merged = new ArrayList<>();
for(int i=0; i<intervals.size(); i++) {
if (i==0) {
merged.add(intervals.get(i));
} else {
Interval last = merged.get(merged.size()-1);
if (last.start <= intervals.get(i).start && intervals.get(i).start <= last.end) {
last.end = Math.max(last.end, intervals.get(i).end);
} else {
merged.add(intervals.get(i));
}
}
}
return merged;
}
}

本文介绍了一种有效的合并区间算法,该算法首先对给定的区间按照起点进行排序,然后通过遍历并比较相邻区间来合并所有重叠的区间。通过示例[1,3],[2,6],[8,10],[15,18]展示了如何将其简化为[1,6],[8,10],[15,18]。
1108

被折叠的 条评论
为什么被折叠?



