【算法题】给定两个有序区间列表,找到这两个列表的交集

示例:

输入: arr1=[[1, 3], [5, 6], [7, 9]], arr2=[[2, 3], [5, 7]]

返回: [2, 3], [5, 6], [7, 7]

输入: arr1=[[1, 3], [5, 7], [9, 12]], arr2=[[5, 10]]

返回: [5, 7], [9, 10]

 思路:

2个区间的关系, 一共有四种可能,没有交集, 部分交集,被包含, 相等。

 因为要求的是两个有序区间列表的交集, 使用 2个指针分别遍历一个区间列表,然后将求当前所指的区间的交集。直到任意一个遍历结束即可。

使用示例① 中的数据,演示执行步骤。

代码:

In [1]: def merge_interval(intervals1, intervals2):
   ...:     ret = []
   ...:     i, j = 0, 0
   ...:
   ...:     while i < len(intervals1) and j < len(intervals2):
   ...:         if intervals1[i][1] < intervals2[j][0]:
   ...:             i += 1
   ...:         elif intervals2[j][1] < intervals1[i][0]:
   ...:             j += 1
   ...:         else:
   ...:             start = max(intervals1[i][0], intervals2[j][0])
   ...:             end = min(intervals1[i][1], intervals2[j][1])
   ...:             ret.append([start, end])
   ...:             if intervals1[i][1] == end:
   ...:                 i += 1
   ...:             if intervals2[j][1] == end:
   ...:                 j += 1
   ...:     return ret
   ...:

In [2]: merge_interval([[1, 3], [5, 6], [7, 9]], [[2, 3], [5, 7]])
Out[2]: [[2, 3], [5, 6], [7, 7]]

In [3]: merge_interval([[1, 3], [5, 7], [9, 11]], [[5, 10]])
Out[3]: [[5, 7], [9, 10]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值