【python-leetcode42-区间合并】区间列表的交集

问题描述:

给定两个由一些闭区间组成的列表,每个区间列表都是成对不相交的,并且已经排序。

返回这两个区间列表的交集。

(形式上,闭区间 [a, b](其中 a <= b)表示实数 x 的集合,而 a <= x <= b。两个闭区间的交集是一组实数,要么为空集,要么为闭区间。例如,[1, 3] 和 [2, 4] 的交集为 [2, 3]。)

示例:

输入:A = [[0,2],[5,10],[13,23],[24,25]], B = [[1,5],[8,12],[15,24],[25,26]]
输出:[[1,2],[5,5],[8,10],[15,23],[24,24],[25,25]]
注意:输入和所需的输出都是区间对象组成的列表,而不是数组或列表。

提示:

  1. 0 <= A.length < 1000
  2. 0 <= B.length < 1000
  3. 0 <= A[i].start, A[i].end, B[i].start, B[i].end < 10^9

代码:

class Solution:
    def intervalIntersection(self, A: List[List[int]], B: List[List[int]]) -> List[List[int]]:
        res = []
        i = j = 0
        while i < len(A) and j < len(B):
            lo = max(A[i][0], B[j][0])
            hi = min(A[i][1], B[j][1])
            if lo <= hi:
                res.append([lo, hi])

            if A[i][1] < B[j][1]:
                i += 1
            else:
                j += 1

        return res

核心就是标红的一段:比如

A = [[0,2],[5,10],[13,23],[24,25]]
B = [[1,5],[8,12],[15,24],[25,26]]

[0,2]和[1,5]之间2比5小,那么A中的下一个数组就可能与[1,5]有交集,所以让指向A的指针+1。反之让指向B的指针+1.

结果:

原文地址:https://www.cnblogs.com/xiximayou/p/12354227.html

时间: 2024-10-30 12:57:23

【python-leetcode42-区间合并】区间列表的交集的相关文章

HDU 3397 Sequence operation(区间合并 + 区间更新)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意:给定n个数,由0,1构成.共有5种操作.每个操作输入3个数,op,a,b. op == 0,将区间[a,b]赋值为0: op == 1,将区间[a,b]赋值为1: op == 2,将区间[a,b]内的01反转: op == 3,查询区间[a,b]中1的个数: op == 4,查询区间[a,b]中连续1的最大长度: 思路:区间合并 + 区间更新.每个结点存7个数: 区间内1的个数c1. 从

HDU 5316——Magician——————【线段树区间合并区间最值】

Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1613    Accepted Submission(s): 470 Problem Description Fantasy magicians usually gain their ability through one of three usual methods:

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

Given two lists of closed intervals, each list of intervals is pairwise disjoint and in sorted order. Return the intersection of these two interval lists. (Formally, a closed interval [a, b] (with a <= b) denotes the set of real numbers x with a <=

lintcode 容易题:Merge Intervals 合并区间

题目: 合并区间 给出若干闭合区间,合并所有重叠的部分. 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ]挑战 O(n log n) 的时间和 O(1) 的额外空间. 解题: 先以区间的左边界进行排序,再异步的方式比较右边边界进行合并 程序来源 Java程序 /** * Definition of Interval: * public class Inte

合并区间(LintCode)

合并区间 给出若干闭合区间,合并所有重叠的部分. 样例 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ] ] 挑战 O(n log n) 的时间和 O(1) 的额外空间. 思路是清晰的,代码是混乱的.先用Collection.sort()方法对List排序.当然也可以先toArray()然后用Arrays.sort()排序.但是都需要写一个实现Comparator接

leetCode 56.Merge Intervals (合并区间) 解题思路和方法

Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 思路:题意很明确,首先对各区间按开始来排序,最后遍历,如果前面和后面的区间有重合,合并. 具体代码: /** * Definition for an interval. * publi

求多个区间合并后区间大小的巧妙解决方法【差分】

上图一共有5个区间,分别是[0,2].[2,4].[8,11].[7,11].[15,18].如果要求这些区间合并后区间的大小,有两种简单的方法. 方法一:比较每两个区间的范围,如果两个区间有交集,则合并它们.最后所有区间会合并成几个离散的大区间,结果为这些区间大小之和.这种方法的时间复杂度是O(n^2). 方法二:使用一个可以覆盖所有区间范围的数组,对每个区间进行标记,结果为数组中被标记元素的个数.这种方法的时间复杂度是O(nm). 注:n是区间个数,m是所有区间总的范围. 如果n和m都比较大

【区间合并】一些小思路

leetcode中有几道和数字区间合并有关的题,大致就是有交集的地方,把这几个有交集的区间合并起来. 思路如下: 先将所有区间按照开头进行排序,然后开始遍历,用目前已确定的区间的尾部 和 即将要判断的区间的头部 比较大小, 1)如果尾部>=头部,证明有交集,就去看这两个区间谁的尾部更大,取更大的尾部: 2)如果尾部<头部,证明没有交集,那么直接把这个已确定的区间放入返回结果中,然后继续判断. 以Leetcode56题为例: # Definition for an interval. # cla

【LeetCode】数组--合并区间(56)

写在前面   老粉丝可能知道现阶段的LeetCode刷题将按照某一个特定的专题进行,之前的[贪心算法]已经结束,虽然只有三个题却包含了简单,中等,困难这三个维度,今天介绍的是第二个专题[数组] 数组(Array)是一种线性表数据结构.它用一组连续的内存空间,来存储一组具有相同类型的数据.在每一种编程语言中,基本都会有数组这种数据类型.不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构. 贪心算法回顾: [LeetCode]贪心算法--买卖股票的最佳时机II(122) [LeetC