leetcode 28: Merge Intervals
2013-01-11 07:05
162 查看
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
For example,
Given
[1,3],[2,6],[8,10],[15,18],
return
[1,6],[8,10],[15,18].
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */ class Solution { public: vector<Interval> merge(vector<Interval> &intervals) { // Start typing your C/C++ solution below // if intervals are sorted. it would be easy. if( intervals.size() <= 1) return intervals; insertion_sort( intervals ); vector<Interval> rel; Interval base = intervals[0]; rel.push_back( base ); for( int i=1; i< intervals.size(); i++) { Interval & pre = rel.back(); Interval & next = intervals[i]; if( pre.end < next.start ) { rel.push_back( next ); } else if( pre.end < next.end) { pre.end = next.end; } // otherwise, do nohting since base case has already included the new one. } return rel; } void insertion_sort( vector<Interval> &intervals ) { for( int i=1; i< intervals.size(); i++) { Interval temp = intervals[i]; int j=i-1; while(j>=0) { if(intervals[j].start>temp.start || (intervals[j].start==temp.start && intervals[j].end>temp.end) ) { intervals[j+1] = intervals[j]; j--; } else { break; } } intervals[j+1] = temp; } } };
/** * 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) { // Start typing your Java solution below // DO NOT write main() function ArrayList<Interval> res = new ArrayList<Interval>(); int sz = intervals.size(); if(sz<1) return res; Collections.sort(intervals, new IntervalComparator()); res.add(new Interval(intervals.get(0).start, intervals.get(0).end ) ); //this won't modify the original input. for(int i=1; i<sz; i++) { Interval last = res.get(res.size()-1); Interval x = intervals.get(i); if(last.end < x.start) { res.add( new Interval(intervals.get(i).start, intervals.get(i).end ) ); } else if( last.end < x.end) { last.end = x.end; } } return res; } class IntervalComparator implements Comparator<Interval>{ public int compare(Interval a, Interval b) { if(a.start < b.start) return -1; else if(a.start>b.start) return 1; else { if(a.end<b.end) return -1; else if(a.end>b.end) return 1; else return 0; } } } }
相关文章推荐
- leetcode 28: Merge Intervals
- leetcode 28: Merge Intervals
- LeetCode 056 Merge Intervals
- leetcode - Merge Intervals
- Java [leetcode 28]Implement strStr()
- LeetCode (Merge Intervals)
- LeetCode-Merge Intervals
- 【LeetCode】Merge Intervals 解题报告
- leetcode merge intervals
- LeetCode刷题【Array】 Merge Intervals
- leetcode -- Merge Intervals -- 典型trick
- [leetcode]Merge Intervals
- LeetCode 56 Merge Intervals
- (java)leetcode-28
- leetcodequestion_56 Merge Intervals
- leetcode28: Implement strStr()
- [LeetCode] Restore IP Address [28]
- leetcode-28-Implement strStr()
- [Leetcode] merge intervals 合并区间
- [LeetCode]Merge Intervals