设为首页 加入收藏

TOP

LeetCode - Merge Intervals
2015-11-21 00:56:14 来源: 作者: 【 】 浏览:1
Tags:LeetCode Merge Intervals

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


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


实现代码:


public IList
  
    Merge(IList
   
     intervals) { if(intervals == null || intervals.Count == 0){ return new List
    
     (); } var result = new List
     
      (); 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; }
     
    
   
  


?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中类定义的细节 下一篇POJ 题目2245 Lotto(DFS水)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: