Merge Intervals
来源:互联网 发布:大将军手写板软件 编辑:程序博客网 时间:2024/05/22 08:19
题目详情:https://leetcode.com/problems/merge-intervals/description/
思路:设置两个变量earlyStartTime,用于存储开始时间;latestEndTime用于存储最晚的结束时间。这两个变量的起始值为第一个Interval的开始时间和结束时间。
1、首先对intervals进行排序
2、从第二个元素开始,依次用latestEndTime和当前元素Interval的开始时间和结束时间比较。
2.1 如果latestEndTime小于当前元素的开始时间,则证明没有重叠的部分,那么此时可以将earlyStartTime和latestEndTime添加到ans,并更新earlyStartTime和latestEndTime,即更新为当前元素的开始时间和结束时间。
2.2 如果latestEndTime大于等于当前元素的开始时间,且小于等于当前元素的结束时间,说明有重叠的部分,则此时只更新latestEndTime的值,更新为latestEndTime和当前元素结束时间的最大值。
上述两步处理完后,继续后面的元素比较。
还有一些小细节,比如有重复元素,或者最后的ealryStartTime和latestEndTime没有添加等。
自己写的代码:
class Solution(object): def merge(self, intervals): """ :type intervals: List[Interval] :rtype: List[Interval] """ length=len(intervals) if length==0: return [] if length==1: return intervals def compared(a,b):#定义对Interval的排序规则 if a.start>b.start:#首先按照开始时间排序,开始时间早的,排序靠前 return 1 elif a.start<b.start:#开始时间晚的,排序靠后 return -1 else:#a.start==b.start,如果开始时间相同,那么比较结束时间 if a.end>b.end:#结束时间晚,排序靠后 return 1 elif a.end<b.end:#结束时间早,排序靠前 return -1 else:#开始时间和结束时间相同的情况 return 0 sortedIntervals=sorted(intervals,compared)#排序 i,ans=1,[]#从第一个元素开始,ans用于存储结果 latestEndTime=sortedIntervals[0].end#latestEndTime存储为最晚的结束时间,初始化为第一个元素的结束时间 earlyStartTime=sortedIntervals[0].start#最早的开始时间,初始化为第一个元素的开始时间 while i<length:#i从1开始 if sortedIntervals[i].start==sortedIntervals[i-1].start and sortedIntervals[i].end==sortedIntervals[i-1].end:#去除重复元素 if i==length-1:#如果i在最后一个位置上 ans.append([earlyStartTime,latestEndTime])#将可能丢失的位置信息添加 i=i+1 continue if sortedIntervals[i].start>latestEndTime:#如果某段区间的开始时间大于已知的最晚结束时间,那么就已经没有重叠的时间段了 ans.append([earlyStartTime,latestEndTime])#将已知的开始最早开始时间,最晚结束时间添加到ans中 #更新earlyStartTime,latestEndTime earlyStartTime,latestEndTime=sortedIntervals[i].start,sortedIntervals[i].end elif sortedIntervals[i].end>=latestEndTime:#如果latestEndTime在某一个区间的内部 latestEndTime=sortedIntervals[i].end#那么证明有重叠部分,更新latestEndTime,即最晚结束时间 if i==length-1:#检测i是否在最后位置上,以免漏掉区间信息 ans.append([earlyStartTime,latestEndTime]) i=i+1 return ans
阅读全文
0 0
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- merge intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- Merge Intervals
- riscv安装tools的时候出现gitclone错误
- 几个常用的 Git 高级命令
- i++与++i的区别
- WebApi系列~开放的CORS,跨域资源访问对所有人开放
- 技术控必读,VR中神乎其神的异步时间扭曲技术原来如此
- Merge Intervals
- Scheme跳转协议
- 对echart中的一些属性设置的认识
- OSI七层模型详解
- c++标准库wstring实现原理
- 【JUnit 报错】 method initializationerror not found:JUnit4单元测试报错问题
- Informatica Joiner组件
- Android 实战技巧-状态栏渐变
- 【Python】Python 的图形界面(GUI)编程