题目:
给出若干闭合区间,合并所有重叠的部分。
样例
给出的区间列表 => 合并后的区间列表:
[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ]
挑战
O(n log n) 的时间和 O(1) 的额外空间。
解题:
先以区间的左边界进行排序,再异步的方式比较右边边界进行合并
Java程序
/** * Definition of Interval: * public class Interval { * int start, end; * Interval(int start, int end) { * this.start = start; * this.end = end; * } */ class Solution { /** * @param intervals: Sorted interval list. * @return: A new sorted interval list. */ public List<Interval> merge(List<Interval> intervals) { // write your code here if(intervals == null || intervals.size()<=1){ return intervals; } Collections.sort(intervals,new IntervalComparator()); List<Interval> result = new ArrayList<Interval>(); Interval last = intervals.get(0); for(int i=1;i<intervals.size();i++){ Interval curt = intervals.get(i); if(curt.start<=last.end){ last.end = Math.max(last.end,curt.end); }else{ result.add(last); last = curt; } } result.add(last); return result; } private class IntervalComparator implements Comparator<Interval>{ public int compare(Interval a,Interval b){ return a.start - b.start; } } }
总耗时: 2250 ms
Python程序
时间: 2024-10-11 05:50:25