class Solution:
def judgeIntersection(self,a:'Interval',b:'Interval'): #返回值1,bool类型,是否有交集:True-有交集,False-无交集
#返回值2,int类型,哪个先结束:0-A先结束,1-B先结束,2-AB同时结束
#返回值3,Interval类型,交集的值:有交集时是Interval实例,无交集时是None intersect = False firstEnd = 2
if a.end < b.end:
firstEnd = 0
elif a.end > b.end:
firstEnd = 1
else:
firstEnd = 2 intersectArea = Interval() if a.start <= b.start and a.end >= b.start and a.end <= b.end:
#print('True,[b.start,a.end]')
intersect = True
intersectArea.start=b.start
intersectArea.end=a.end
elif a.start >= b.start and a.start <= b.end and a.end >= b.end:
#print('True,[a.start,b.end]')
intersect = True
intersectArea.start=a.start
intersectArea.end=b.end
elif a.start>= b.start and a.end <= b.end:
#print('True,[a.start,a.end]')
intersect = True
intersectArea.start=a.start
intersectArea.end=a.end
elif a.start<=b.start and a.end >= b.end:
#print('True,[b.start,b.end]')
intersect = True
intersectArea.start=b.start
intersectArea.end=b.end
elif a.end < b.start:
#print('False,None')
intersect = False
intersectArea = None
elif a.start > b.end:
#print('False,None')
intersect = False
intersectArea = None
else:
print('error') return intersect,firstEnd,intersectArea def intervalIntersection(self, A: 'List[Interval]', B: 'List[Interval]') -> 'List[Interval]':
Aindex = 0
Bindex = 0
Alen = len(A)
Blen = len(B)
ListI = list() while Aindex < Alen and Bindex < Blen:
r1,r2,r3 = self.judgeIntersection(A[Aindex],B[Bindex])
if r1:
ListI.append(r3) if r2 == 0:
Aindex+=1
elif r2 == 1:
Bindex+=1
else:
Aindex+=1
Bindex+=1 return ListI

leetcode986的更多相关文章

  1. [Swift]LeetCode986. 区间列表的交集 | Interval List Intersections

    Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order ...

随机推荐

  1. 【Guava 】Collections – Join and Split

    Convert Collections to String Using Joiner Convert List into String Using Joiner @Test public void w ...

  2. HTTP之Cookie

    cookie是什么 浏览器存储在本地电脑上的一小段文本文件,cookie的存在主要是为了解决http协议无状态的问题,例如通过cookie来判断用户的登录状态,是否是某一个用户等. cookie的结构 ...

  3. Hadoop是怎么分块Block的?

    不多说,直接上干货! hadoop的分块有两部分. 第一部分就是数据的划分(即把File划分成Block),这个是物理上真真实实的进行了划分,数据文件上传到HDFS里的时候,需要划分成一块一块,每块的 ...

  4. reids(缓存,reids下载,安装 测试)

    什么是缓存:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找.由于缓存的运行速度比内存快得多,故缓存的作用 ...

  5. 廖雪峰Java1-3流程控制-4switch多重选择

    switch语句 根据switch(表达式)跳转到匹配的case结果,继续执行case结果: 的后续语句,遇到break结束执行,没有匹配条件,执行default语句. int i = 3 switc ...

  6. AndroidStudio快捷键使用记录

    输入logt+回车 自动增加Tag的定义. private static final String TAG = "MainActivity"; 输入logd+回车 自动增加d级别的 ...

  7. github .net core

    https://github.com/dotnet/core/blob/master/Documentation/core-repos.md

  8. 俞敏洪:我创业24年感悟的3条CEO守则

    转自:http://www.gamelook.com.cn/2017/10/306603 创业24年,他的创业经历被拍成了电影.在一次小范围聚会时,他说现实远比剧本要精彩.“如果让我一切从头开始,我会 ...

  9. (转)Linux netstat命令详解

    简介 Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Member ...

  10. Eclipse中Activiti插件的安装

    要想使用Activiti流程引擎,需要在Eclipse安装Activiti插件,才能画流程设计图. 打开Eclipse,点击help -> Install new Software 然后点击 A ...