码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode - Merge Intervals

时间:2015-08-03 16:55:46      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:


问题描述: 对1组区间合并, 例如[2,4]和[3,6],则合并为[2,6]
实现思路:
1.对区间的最小值进行排序(O(N* Log N))
2.遍历,分情况进行合并,去重,添加到结果集(O(N2))


对于两个区间的关系,一共分4种情况,注释里面已经注明。


实现代码:



public IList<Interval> Merge(IList<Interval> intervals) 
{
	if(intervals == null || intervals.Count == 0){
		return new List<Interval>();
	}
	
	var result = new List<Interval>();
	
	intervals = intervals.OrderBy(s=>s.start).ToList();
	
	var len = intervals.Count;
	for(var i = 0;i < len; i++){
		// - add or merge into result
		bool merged = false;
		foreach(var r in result){
			// |-------| : r
			//           |---| : intervals[i]
			if(r.end < intervals[i].start){
				// no interset 
				continue;
			}
			// |-------| : r
			//         |---| : intervals[i]
			else if(r.end == intervals[i].start){
				r.end = intervals[i].end;
				merged = true;
				break;
			}
			// |------------------| : r
			//  |-----| : intervals[i]
			else if(r.end >= intervals[i].end){
				// do nothing
				merged = true;
				break;
			}
			// |--------| : r
			//   |--------| : intervals[i]
			else if(r.end < intervals[i].end){
				r.end = intervals[i].end;
				merged = true;
				break;
			}
		}
		
		if(!merged){
			result.Add(intervals[i]);
		}
	}
	return result;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

LeetCode - Merge Intervals

标签:

原文地址:http://blog.csdn.net/lan_liang/article/details/47257907

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!