华为机试 - 区间交叠问题

news2024/11/14 15:26:32

目录

题目描述

输入描述

输出描述

用例

题目解析

算法源码


题目描述

给定坐标轴上的一组线段,线段的起点和终点均为整数并且长度不小于1,请你从中找到最少数量的线段,这些线段可以覆盖柱所有线段。

输入描述

第一行输入为所有线段的数量,不超过10000,后面每行表示一条线段,格式为"x,y",x和y分别表示起点和终点,取值范围是[-10^5,10^5]。

输出描述

最少线段数量,为正整数

用例

输入

3
1,4
2,5
3,6

输出2
说明

题目解析

用例1图示如下

可以发现,只要选择[]1,4[和[3,6]就可以覆盖住所有给定线段。

我的解题思路如下:

首先,将所有区间ranges按照开始位置升序,如果开始位置相同,则按照结束位置降序。

然后,创建一个辅助的栈stack,初始时将排序后的第一个区间压入栈中。

然后,遍历出1~ranges.length范围内的每一个区间ranges[i],将遍历到ranges[i]和stack栈顶区间对比:

  • 如果stack栈顶区间可以包含ranges[i]区间,则range[i]不压入栈顶
  • 如果stack栈顶区间被ranges[i]区间包含,则弹出stack栈顶元素,继续比较ranges[i]和stack新的栈顶元素
  • 如果stack栈顶区间和ranges[i]无法互相包含,只有部分交集,则将ranges[i]区间去除交集部分后,剩余部分区间压入stack
  • 如果stack栈顶区间和ranges[i]区间没有交集,那么直接将ranges[i]压入栈顶

这样的话,最终stack中有多少个区间,就代表至少需要多少个区间才能覆盖所有线段。

比如,用例1的运行流程如下:

 

 

2,5 和 1,4 存在重叠区间,我们只保留2,5区间的非重叠部分4,5

 

比较4,5区间和3,6区间,发现3,6完全涵盖2,5,因此2,5区间不再需要,可以从stack中弹栈删掉,即原始的2,5区间被删除了。

 

继续比较1,4和3,6区间,发现无法互相涵盖,因此都需要保留,但是3,6有部分区间和1,4重叠,因此只保留3,6不重叠部分4,6。

最终只需要两个区间,对应1,4、3,6,即可涵盖所有线段 

自测用例:

8
0,4
1,2
1,4
3,7
6,8
10,12
11,13
12,14

 输出5,即至少需要上面标红的五个区间才能覆盖所有线段。

算法源码

/* JavaScript Node ACM模式 控制台输入获取 */
const readline = require("readline");

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

const lines = [];
let n;
rl.on("line", (line) => {
  lines.push(line);

  if (lines.length === 1) {
    n = lines[0] - 0;
  }

  if (n && lines.length === n + 1) {
    lines.shift();
    const ranges = lines.map((line) => line.split(",").map(Number));
    console.log(getResult(ranges, n));

    lines.length = 0;
  }
});

function getResult(ranges, n) {
  ranges.sort((a, b) => (a[0] === b[0] ? b[1] - a[1] : a[0] - b[0]));

  const stack = [ranges[0]];

  for (let i = 1; i < ranges.length; i++) {
    const [s2, e2] = ranges[i];

    while (true) {
      const [s1, e1] = stack.at(-1);

      if (s2 <= s1) {
        if (e2 >= e1) stack.pop();
      } else if (s2 < e1) {
        if (e2 > e1) {
          stack.push([e1, e2]);
        }
        break;
      } else {
        stack.push(ranges[i]);
        break;
      }
    }
  }
  console.log(stack);
  return stack.length;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/69635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

键盘输入保护器:KeyScrambler

创新技术屏蔽数字资产 KeyScrambler 开创性的击键加密技术可在 Windows 操作系统、所有浏览器和数百个关键应用程序中实时深入地保护用户键入的信息。 值得信赖的软件让用户安心 KeyScrambler 已经被世界各地的专家、博主和用户测试和使用了 16 年&#xff0c;并被证明对最阴险…

ANSYS_Dsigner仿真串扰

1、边沿RT的大小对串扰的影响 仿真电路如下图所示&#xff1a; V1为V_Pulse电压源&#xff0c;设置如图所示&#xff1a; A4为耦合微带线 这里一定要设置为9.6mil&#xff0c;因为介质厚度我设置的是4.8mil&#xff0c;如果没阻抗匹配会在串扰的基础上增加信号的反射&#xff…

【计算机视觉】完整版复习

计算机标定 齐次坐标 齐次坐标&#xff0c;将欧氏空间的无穷远点&#xff0c;与投影空间中有实际意义的消失点&#xff0c;建立起映射关系。 把齐次坐标转化为笛卡尔坐标的方法&#xff1a;是前面n-1个坐标分量分别除以最后一个分量即可 一些解释和性质&#xff1a; 比较好的…

idea远程debug

有时候我们需要进行远程的debug&#xff0c;本文研究如何进行远程debug&#xff0c;以及使用 IDEA 远程debug的过程中的细节。看完可以解决你的一些疑惑。 1.配置idea 如图&#xff0c;依次点击或者填写对应的ip和端口&#xff0c;需要debug的服务 2.修改启动命令 选择 jdk …

东郊到家、往约到家预约上门理疗按摩系统小程序模式讲解

东郊到家和往约到家都是做上门理疗按摩推拿等服务的线上预约平台&#xff0c;目前已经在全国很多一二线城市都开设了分站&#xff0c;今天我们就来对这两个程序进行讲解。 为什么这类上门服务平台能发展的这么迅速&#xff1f; 一是因为平台成本投入比较低&#xff0c;线上预…

微服务框架 SpringCloud微服务架构 22 DSL 查询语法 22.4 地理查询

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构22 DSL 查询语法22.4 地理查询22.4.1 地理查询22 DSL 查询语法 22.4 地理…

【强化学习论文】多智能体强化学习是一个序列建模问题

文献题目&#xff1a;Multi-Agent Reinforcement Learning is A Sequence Modeling Problem时间&#xff1a;2022代码&#xff1a;https://github.com/PKU-MARL/Multi-Agent-Transformer. 摘要 GPT 系列和 BERT 等大序列模型&#xff08;SM&#xff09;在自然语言处理、视觉和…

FL Studio免费升级21完整版新功能新插件介绍

万众期待的 FL Studio 21 版本正式发布上线&#xff0c;所有FL Studio的用户&#xff0c;都可以免费升级到21版&#xff01; 按照惯例&#xff0c;本次新版也会增加全新插件&#xff0c;来帮助大家更好地创作。今天先给大家分享一下&#xff0c;新增的4款插件简单介绍&#xf…

基于AT89S52单片机的蘑菇大棚环境监测系统论文(附录代码)

目 录 第1章 绪 论 1 1.1 研究背景和意义 1 1.2 国内外发展现状 2 1.3 设计内容和指标 4 第2章 系统设计方案 5 2.1 系统组成 5 2.1.1 总体结构 5 2.1.2 单片机的选型 5 2.1.3 温湿度传感器选型 6 2.1.4 二氧化碳传感器选型 6 2.1.5 PH值传感器选型 7 2.1.6 加热器选型 8 2.1.7…

HTTP协议分析 实验报告

实验名称&#xff1a; HTTP协议分析 一、实验预习 1、实验目的 利用抓包工具&#xff08;Wireshark/Windump/Sniffer&#xff09;抓取HTTP报文&#xff0c;以进一步熟悉和理解HTTP报文格式规范与HTTP协议的工作原理 2、实验内容&#xff08;…

《Linux-权限的理解、shell的理解和粘滞位》

目录 一、shell的理解 二、Linux权限 一、用户的引入 二、权限管理 一、什么是权限 二、Linux下的权限 三、视图展示 四、文件类型 五、为什么gcc编译器编译.txt后缀的文件有问题&#xff1f; 六、修改权限 一、chmod设置文件的访问权限 一、基本使用 二、八进制方案(访…

es的自动补全查询——DSL语句java代码实现

1、DSL语句 elasticsearch提供了Completion Suggester查询来实现自动补全功能。这个查询会匹配以用户输入内容开头的词条并返回。 为了提高补全查询的效率&#xff0c;对于文档中字段的类型有一些约束&#xff1a; 参与补全查询的字段必须是completion类型。 字段的内容一般…

SpringMVC的执行流程

文章目录1 初始化阶段2 匹配阶段3 执行阶段我们把整个流程分成三个阶段初始化阶段匹配阶段执行阶段 1 初始化阶段 在 Web 容器第一次用到 DispatcherServlet 的时候&#xff0c;会创建其对象并执行 init 方法 init 方法内会创建 Spring Web 容器&#xff0c;并调用容器 refre…

阿里十年技术沉淀|深度解析百PB级数据总线技术

云原生场景下数据总线需求场景及挑战 数据总线简介 数据总线作为大数据架构下的流量中枢&#xff0c;在不同的大数据组件之间承载着数据桥梁的作用。通过数据总线&#xff0c;可以实时接入来自服务器、K8s、APP、Web、IoT/移动端等产生的各类异构数据&#xff0c;进行统一数据…

【java 新特性】java8新特性

核心内容 lambda 函数编程 在Java世界里面&#xff0c;面向对象还是主流思想&#xff0c;对于习惯了面向对象编程的开发者来说&#xff0c;抽象的概念并不陌生。面向对象编程是对数据进行抽象&#xff0c;而函数式编程是对行为进行抽象。现实世界中&#xff0c;数据和行为并…

【机器学习实战】使用SGD、随机森林对MNIST数据集实现多分类(jupyterbook)

1. 获取数据集并重新划分数据集 # 获取MNIST数据集 from sklearn.datasets import fetch_openml mnist fetch_openml(mnist_784, version1, cacheTrue, as_frameFalse)# 查看测试器和标签 X, y mnist[data], mnist[target] X_train, X_test, y_train, y_test X[:60000], X[…

Nuxt3使用echart,使用中国地图

目录 第一步安装echart 第二步配置plugins 第三步使用 例如使用饼状图 例如使用中国地图 第一步安装echart npm install echarts --save 第二步配置plugins 在plugins创建echarts.ts文件并写入下面内容 import * as echarts from echartsexport default defineNuxtPlugin((…

springboot事件监听机制二:基本工作原理

前言 这是继《springboot事件监听机制一&#xff1a;实战应用》第二篇&#xff0c;知其然&#xff0c;当然还要知其所以然&#xff0c;深入的源码里面探寻一下这一有套机制的工作原理。spring生态很茂盛&#xff0c;这里不会站太高去分析这个问题&#xff0c;大扯spring的一些原…

优秀的项目跟踪管理软件有哪些?

国内外优秀的项目跟踪管理软件有&#xff1a;1、软件项目跟踪管理PingCode&#xff1b;2、通用项目跟踪管理Worktile&#xff1b;3、小型团队项目跟踪管理Asana&#xff1b;4、基于桌面的项目跟踪软件Microsoft Project&#xff1b;5、适用所有类型项目的跟踪软件Clickup&#…

[ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…