区间列表的交集

2023-11-05

LeetCode 986

区间列表的交集

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

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

(形式上,闭区间 [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]]

解法:双指针

解题思路:

题目要我们找到两个区间的交集,比如说[0,2]和[1,5]区间的交集就是[1,2],也就是两个区间左取大,右取小,因此我们就用两个指针来遍历这两个数组

指针移动的规则

  • 区间的右边较小的指针移动,较大的不移动,因为后面可能还有交集,比如说[1,5]跟区间[0,2]以及区间[5,10]都有交集
  • 当两个区间的右边都相同时,同时移动两个指针

代码如下:

class Solution {
    public int[][] intervalIntersection(int[][] A, int[][] B) {
        int Apos=0; //A数组的指针
        int Bpos=0; //B数组的指针
        ArrayList<int[]> res = new ArrayList<int[]>();
        while(Apos<A.length && Bpos<B.length)
        {
            int Astart = A[Apos][0];
            int Aend = A[Apos][1];
            int Bstart = B[Bpos][0];
            int Bend = B[Bpos][1];
            //两个区间的左右边界
            if(Aend<Bend) //有边界小的指针移动
                Apos++;
            else if(Aend>Bend)
                Bpos++;
            else //右边界相同时同时移动
            {
                Apos++;
                Bpos++;
            }
            if(Astart>Bend || Bstart>Aend) 
            //避免出现区间左大右小的情况,如[8,12]和[13,23]
                continue;
            res.add(new int[] {Math.max(Astart,Bstart),Math.min(Aend,Bend)}); 
        }
        int[][] ans = new int[res.size()][2];
        int i=0;
        for(int[] arr : res)
        {
            ans[i][0] = arr[0];
            ans[i][1] = arr[1];
            i++;
        }
        return ans;
    }
}

题目来源

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/interval-list-intersections
Code)
链接:https://leetcode-cn.com/problems/interval-list-intersections
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区间列表的交集 的相关文章

  • lvgl在Windows上的模拟器

    vs不知道什么时候被搞坏了 编译不了总是报找不到头文件 挺烦人的 换gcc来编译lvgl模拟器 编辑器用的是vscode 源码在这 https gitee com t01051 lvgl windows sim vscode from gi
  • 解决Android Studio卡顿的问题

    通用方案 Help gt Edit Custom VM Options 根据电脑状况按需分配 Xms2048m 初始堆 Xmx2048m 最大堆 XX MaxPermSize 2048m 最大非堆内存 XX ReservedCodeCach

随机推荐

  • vue 兄弟组件之间传值之bus

    有时候两个组件也需要通信 非父子关系 当然Vue2 0提供了Vuex 但在简单的场景下 可以使用一个空的Vue实例作为中央事件总线 参考 http blog csdn net u013034014 article details 54574
  • Meltdown:Reading Kernel Memory from User Space 论文中英对照

    Meltdown Reading Kernel Memory from User Space 翻译目录 摘要 Abstract 一 简介 Introduction 二 背景介绍 Background 1 乱序执行 Out of order
  • qt画线、画一条线

    catalog 示例 示例 两边淡 中间粗 中间最粗 是 Ma w 一般0 5左右 分成20份 左右各10份 void Painter draw line QPainter p int x1 int y1 int x2 int y2 dou
  • Python 面经系列之笔试题

    金九银十即将来临 整理了一份某手 某行的笔试题 如有更优解法 欢迎交流 题一 实现一个函数 参数是一个字符串 一个是子串长度 返回要求符合长度的子串出现最多次数的子串以及出现次数 如果最多出现次数有多个子串 都输出 例如 输入 allstr
  • mysql 更新指定字段部分字符替换

    mysql 更新指定字段部分字符替换 可以使用 MySQL 的 REPLACE 函数来替换字符串中的一部分字符 然后再将更新后的字符串保存回数据库 REPLACE 函数的语法如下 REPLACE str find string replac
  • 【Git系列教程-7】Pycharm中使用Git提交代码到Github或码云远程仓库详解

    说明 点击进入整个系列文章索引列表 Git系列教程 0 整体索引文件 文件名红色 表示在工作区 文件名绿色 表示在暂存区 文件名蓝色 表示文件有修改 位于暂存区 文件名无颜色 表示位于本地仓库区或已经提交到远程仓库区 文件名为红色 需要手动
  • nn.Embedding

    在PyTorch中 针对词向量有一个专门的层nn Embedding 用来实现词与词向量的映射 nn Embedding具有一个权重 weight 形状是 vocab size embedding dim Embedding层的输入形状是b
  • TensorFlow手写数字识别

    1 保存为图片 使用mnist数据集 from tensorflow examples tutorials mnist import input data mnist input data read data sets MNIST data
  • 阿里云ecs服务器如何设置实现访问互联网

    概述 阿里云上新开了一台ecs服务器 想访问外网下载或安装一些源依赖或者应用 我们如何设置安全组实现访问外网 首先我们先要了解rfc1918 什么是rfc1918 本段转载自 What is RFC 1918 Definition from
  • python_字典列表嵌套的排序问题

    上一篇我们聊到python 字典和列表嵌套用法 这次我们聊聊字典和列表嵌套中的排序问题 这个在python基础中不会提到 但实际经常运用 面试中也喜欢问 我们娓娓道来 在说组合排序之前 先来看看排序有哪些函数 排序函数 使用排序有两个可用方
  • recyclerlistview

    RecyclerView的基本用法 和百分比布局类似 RecyclerView也是新增布局 因此需要在项目的build gradle添加相应的依赖库才行 打开app build gradle文件 在dependencies闭包中添加如下内容
  • 单源最短路径问题c++实现(贪心算法)

    文章目录 1 认真审阅题目 明确题目的已知条件和求解的目标 2 问题建模 3 算法设计 4 编码实现 5 测试数据 6 程序运行结果 1 认真审阅题目 明确题目的已知条件和求解的目标 给定一个有向带权图 G V E 其中每条边的权是一个非负
  • 实战wxPython:041 - 高级控件之树状控件TreeCtrl

    树形控件wx TreeCtrl将信息表示为层次结构 其中的项可以展开以显示更多的项 一 树状控件wx TreeCtrl wx TreeCtrl继承自wx WithImages类 因此提供了将图像与控件项关联的函数 通过wx WithImag
  • 链式队列的基本操作(c语言实现)

    队列类型定义 队列的操作与栈的操作类似 不同的是 删除是在队头进行 队列分类 顺序队列 与栈相似 数组 无非就是多了一个指针 简单的讲讲顺序队列 元素入队 队尾指针往后加一 元素出队 队头指针往后加一 现在我们设想一下 前面有一个数组 我们
  • 制作AR换装游戏(上篇AR识图)#1024程序员节#

    EasyAR制作AR游戏的方法我之前的文章讲过 只是当时用的旧版的 链接放上 Unity和Easy AR制作一个AR的APP alayeshi的专栏 CSDN博客这个不是什么正规的项目 就是觉得AR好玩 研究了一下 很早之前就玩过了 现在再
  • python的open函数使用

    在python中使用open函数对文件进行处理 1 open python打开文件使用open 函数 返回一个指向文件的指针 该函数常用以下三个参数 1 1 参数1 目标文件的路径 名字 最好使用r 路径 这种原始字符串写法 防止有转义字符
  • ajax返回request,ajaxRequest解析

    刚开始学习ajax 听网上的一下大佬说 ajax要与springMVC使用 让我对这个ajax有恐惧 不过慢慢学习了ajx后其实可以不用springMVC的 说回主题 ajaxREquest是一个模板 我们只要在调用时传了正确的参数即可调用
  • C++:CMake重要指令【cmake_minimum_required、project,set、STREQUAL ....】

    一 CMake重要指令 1 重要指令 1 1 cmake minimum required 指定CMake的最小版本要求 语法 cmake minimum required VERSION versionNumber FATAL ERROR
  • 高级加密标准AES的工作模式(ECB、CBC、CFB、OFB)

    最近在重构之前写的HTTP代理 这个代理是由代理客户端和代理服务端组成的 二者之前使用SSL保证通信内容不会受到中间人 MITM 攻击 而新的实现打算移除SSL 因为SSL握手的开销过大 尤其是客户端与服务端之间隔了个太平洋 另一方面本月中
  • 区间列表的交集

    LeetCode 986 区间列表的交集 给定两个由一些 闭区间 组成的列表 每个区间列表都是成对不相交的 并且已经排序 返回这两个区间列表的交集 形式上 闭区间 a b 其中 a lt b 表示实数 x 的集合 而 a lt x lt b