leetcode之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].

關鍵還是思路,當理解了思路時,這道題並不難,實現思路如下:首先對向量進行排序,這裏需要利用自定義比較函數,然後利用left和right分別存放已掃描過的但還未進入vector中的數對的start值和end值,針對當前數對,判斷其start值是否與之前的right有重合,即當前數對的start<=right?,如果有重合則更新之前保存的right值right = max(right,intervals[i].end);,否則判斷left和right是否是數對(即left是否爲-1),是數對的話存入vector,同時更新left和right值。循環結束後要對最後一個left和right數對進行判斷。

struct Interval {
      int start;
      int end;
      Interval() : start(0), end(0) {}
      Interval(int s, int e) : start(s), end(e) {}
  };
 bool cmp(Interval a,Interval b){
	 return a.start < b.start;
 }
class Solution {
public:
    vector<Interval> merge(vector<Interval> &intervals) {
		vector<Interval>v;			
		sort(intervals.begin(),intervals.end(),cmp);
		int left = -1,right = -1;
		for(int i = 0; i < intervals.size(); i++){
			if(intervals[i].start <= right)
				right = max(right,intervals[i].end);
			else{
				if(left != -1){
					v.push_back(Interval(left,right));					
				}
				left = intervals[i].start;
				right = intervals[i].end;
			}
		}
		if(left != -1){
			v.push_back(Interval(left,right));
		}
		return v;
    }
};


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章