4/15/2014

Leetcode -- Merge Intervals

We have to sort the vector by the start value first.
/**  
  * 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) {  
     vector<Interval> result;  
     if(intervals.empty()) {  
       return result;  
     }  
     sort(intervals.begin(), intervals.end(), [](Interval i1, Interval i2) {  
       return i1.start < i2.start;   
     });  
     Interval curr(intervals[0]);  
     for(int i = 1; i < intervals.size(); ++i) {  
       if(intervals[i].start <= curr.end) {  
         if(intervals[i].end > curr.end) {  
          curr.end = intervals[i].end;   
         }   
       } else {  
         result.emplace_back(curr);  
         curr = intervals[i];  
       }  
     }  
     result.emplace_back(curr);  
     return result;  
   }  
 };  

No comments: