当前位置: 首页 > news >正文

LeetCode - Merge Intervals


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


对于两个区间的关系,一共分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 -- Three Sum
  • SQL2005CLR函数扩展-字符串函数
  • 算法面试题-- 连接树的所有兄弟节点
  • 怀念穆大叔
  • LeetCode -- Flatten 二叉树
  • [IE编程] WebBrowser控件的多页面浏览(Tabbed Browsing)开发接口
  • LeetCode -- 查找最小公共祖先
  • 8位程序员对Oracle收购Sun的担忧与期待
  • LeetCode -- 顺时针旋转图片90度
  • LeetCode -- Path Sum ||
  • 35岁IT“老人”的随笔
  • LeetCode -- Decode Ways
  • 嵌入式Linux系统中的GUI系统的研究与移植
  • LeetCode -- Substring with Concatenation of All Words
  • asp.net MVC5 sitemap 的使用
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【Amaple教程】5. 插件
  • CSS居中完全指南——构建CSS居中决策树
  • Docker入门(二) - Dockerfile
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • laravel5.5 视图共享数据
  • Linux Process Manage
  • Netty源码解析1-Buffer
  • spring security oauth2 password授权模式
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • Vultr 教程目录
  • 当SetTimeout遇到了字符串
  • 构建二叉树进行数值数组的去重及优化
  • 官方解决所有 npm 全局安装权限问题
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 适配iPhoneX、iPhoneXs、iPhoneXs Max、iPhoneXr 屏幕尺寸及安全区域
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一些关于Rust在2019年的思考
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • 进程与线程(三)——进程/线程间通信
  • 如何正确理解,内页权重高于首页?
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (Java数据结构)ArrayList
  • (二)WCF的Binding模型
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (南京观海微电子)——COF介绍
  • (四)JPA - JQPL 实现增删改查
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)树状数组
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net Signalr 使用笔记
  • .NET 服务 ServiceController
  • .NET 简介:跨平台、开源、高性能的开发平台