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

解題思路:

基於間隔的start屬性進行升序排序,然後一趟遍歷合並存在重疊的間隔區間。


AC代碼如下:

class Solution {
public:
	vector<Interval> merge(vector<Interval>& intervals) {
		vector<Interval> ans;
		if (intervals.size() == 0) return ans;
		sort(intervals.begin(), intervals.end(), cmp);
		Interval cur = intervals[0];
		for (int i = 1; i < intervals.size(); ++i){
			if (intervals[i].start >= cur.start && intervals[i].start <= cur.end){
				cur = Interval(cur.start, max(cur.end, intervals[i].end));
			}
			else{
				ans.push_back(cur);
				cur = intervals[i];
			}
		}
		ans.push_back(cur);
		return ans;
	}

	static bool cmp(Interval& a, Interval& b)
	{
		return a.start < b.start;
	}
};


發佈了112 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章