华为OD机试真题 Java 实现【最少数量线段覆盖】【2023Q1 200分】,附详细解题思路

news2025/2/2 21:48:00

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 四、Java算法源码
    • 五、效果展示
      • 1、输入
      • 2、输出
      • 3、说明
      • 4、复杂一点
      • 5、理性分析一下

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

  • 专栏福利:限时订阅49.9,订阅后可加入华为OD刷题群,获得哪吒优先答疑机会(华为OD刷题指导,远程代码调试),群里大佬众多可以抱团取暖,群友刷题经验分享,考试经验分享。

在这里插入图片描述

一、题目描述

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

二、输入描述

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

三、输出描述

最少线段数量,为正整数。

四、解题思路

  1. 定义一个节点,有左节点和右节点两个属性;
  2. 在Node类中定义compareTo方法,比较Node左节点;
    • 如果当前node和参数node的左节点相当,返回参数右节点与当前的右节点差;
    • 如果当前node和参数node的左节点不相当,返回当前node和参数node的左节点的差值;
  3. 输入所有线段的数量n;
  4. 输入n个Node节点,有两个值,起点和终点;
  5. 将输入的Node节点进行排序,根据Node左节点进行升序排列;
  6. 定义变量right,记录第一个节点的右节点;
  7. 定义变量maxRight,记录最大右节点,初始化为第一个节点的右节点;
  8. 遍历节点集合arr;
  9. 如果之后的右节点大于第一个右节点;
  10. 比较最大右节点与当前的右节点;
  11. 获取最大右节点;
  12. 循环往复,最后输出最少线段数量。

四、Java算法源码

public static void main(String[] args) {
    Node[] arr = new Node[10000];
    Scanner sc = new Scanner(System.in);
    // 输入所有线段的数量n
    int n = sc.nextInt();
    // 输入n个Node节点,有两个值,起点和终点
    for (int i = 0; i < n; i++) {
        String[] s = sc.next().split(",");
        arr[i] = new Node(Integer.parseInt(s[0]), Integer.parseInt(s[1]));
    }
    
    // 将输入的Node节点进行排序,根据Node左节点进行升序排列
    Arrays.sort(arr, 0, n - 1);

    int ret = 1;
    // 第一个节点的右节点
    int right = arr[0].r;
    // 最大右节点,初始化为第一个节点的右节点
    int maxRight = arr[0].r;
    for (int i = 1; i < n; i++) {
        // 如果之后的右节点大于第一个右节点
        if (arr[i].l > right) {
            // 比较最大右节点与当前的右节点
            if (maxRight > right) {
                ret++;
                right = maxRight;
            }
            if (maxRight < arr[i].l) {
                ret++;
                right = arr[i].r;
            }
        }
        // 获取最大右节点
        maxRight = Math.max(arr[i].r, maxRight);
    }
    if (maxRight > right) {
        ret++;
    }
    System.out.println(ret);
}

/**
 * 定义一个节点,有左节点和右节点两个属性
 */
static class Node implements Comparable<Node> {
    int l, r;

    public Node(int l, int r) {
        this.l = l;
        this.r = r;
    }

    /**
     * 和当前结点进行比较
     * 如果当前node和参数node的左节点相当,返回参数右节点与当前的右节点差
     * 如果当前node和参数node的左节点不相当,返回当前node和参数node的左节点的差值
     * @param o
     * @return
     */
    @Override
    public int compareTo(Node o) {
        if (l == o.l) {
            return o.r - r;
        }
        return l - o.l;
    }
}

五、效果展示

1、输入

3
1,7
3,6
8,9

2、输出

2

3、说明

选取2条线段[1,7]和[8,9]即可,这两条线段可以覆盖[3,6]。

在这里插入图片描述

4、复杂一点

6
15,20
3,6
8,12
1,7
11,15
18,20

5、理性分析一下

先按照节点Node的左节点进行升序排序。

6
1,7
3,6
8,12
11,15
15,20
18,20

  1. 一共6行数据;
  2. 第一行1,7全包含第二行3,6 — 1,7
  3. 第三行8,12,与1,7无覆盖,故输出1,7 + 8,12;
  4. 第四行11,15,不能全覆盖,故输出1,7 + 8,12 + 11,15;
  5. 第五行15,20,不能全覆盖,故输出1,7 + 8,12 + 11,15 + 15,20;
  6. 第六行18,20,被15,20覆盖,故弃用,最后输出1,7 + 8,12 + 11,15 + 15,20,,共最少线段数量 = 4个。

你觉得对吗,自己测试一下吧


🏆下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路

🏆本文收录于,华为OD机试(JAVA)(2022&2023)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

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

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

相关文章

FLStudio21中文版水果软件最新版下载安装图文教程

FL Studio21简称FL&#xff0c;全称&#xff1a;Fruity Loops Studio&#xff0c;因此国人习惯叫它"水果"。目前版本是FL Studio20&#xff0c;它让你的计算机就像是全功能的录音室&#xff0c;大混音盘&#xff0c;非常先进的制作工具&#xff0c;让你的音乐突破想象…

数据结构--图定义与基本术语

数据结构–图定义与基本术语 图的定义 图G由 顶点集 V \color{red}顶点集V 顶点集V和 边集 E \color{red}边集E 边集E组成&#xff0c;记为G (V, E)&#xff0c;其中V(G)表示图G中顶点的有限非空集&#xff1b; E(G)表示图G中顶点之间的关系&#xff08;边&#xff09;集合。…

现代化 Android 开发:Jetpack Compose 最佳实践

作者&#xff1a;古哥E下 如果一直关注 Compose 的发展的话&#xff0c;可以明显感受到 2022 年和 2023 年的 Compose 使用讨论的声音已经完全不一样了, 2022 年还多是观望&#xff0c;2023 年就有很多团队开始采纳 Compose 来进行开发了。不过也有很多同学接触了下 Compose&am…

22.JavaWeb-Minio存储服务器

MinIO是一个开源的对象存储服务器&#xff0c;它兼容Amazon S3 API。它提供了一个简单而强大的存储解决方案&#xff0c;可以用于存储和检索任意大小的文件对象&#xff0c;如图片、视频、文档等。 1.安装与配置Minio https://dl.min.io/server/minio/release/windows-amd64/…

Leetcode 1352: 最后K个数的乘积

题目描述 链接&#xff1a;https://leetcode.cn/problems/product-of-the-last-k-numbers/ 结果 耗时&#xff1a;12min-13min 思路 暴力法&#xff0c;直接从后面读取数组计算。 Java代码 import java.util.ArrayList;class ProductOfNumbers {ArrayList<Integer…

4个简单易上手的免费抠图工具,让你轻松在线抠图!

本文介绍了四个简单易上手的免费抠图工具&#xff0c;它们分别是记灵在线工具、Remove、FocoClipping和免费抠图工具。无论你是初学者还是有经验的设计师&#xff0c;这些工具都能帮助你快速、高效地进行在线抠图操作。 在现代设计和摄影中&#xff0c;抠图是一项重要且常见的…

新建一个Vue项目后,如何在vue.config,js中配置后端访问地址

在 Vue 2 项目中&#xff0c;可以通过配置 vue.config.js 文件来设置后端访问地址。下面是一个简单的示例&#xff1a; 在项目根目录下新建 vue.config.js 文件&#xff08;如果已存在&#xff0c;则直接编辑该文件&#xff09;。在 vue.config.js 文件中添加以下内容&#xf…

ClickHouse原理剖析

1.ClickHouse简介 ClickHouse是一款开源的面向联机分析处理的列式数据库&#xff0c;其独立于Hadoop大数据体系&#xff0c;最核心的特点是极致压缩率和极速查询性能。同时&#xff0c;ClickHouse支持SQL查询&#xff0c;且查询性能好&#xff0c;特别是基于大宽表的聚合分析查…

yolo系列学习

文章目录 理论基础YOLO-V1YOLO-V2YOLOV3 教学视频 理论基础 不同阶段算法优缺点分析 two-stage (两阶段) &#xff1a;Faster-rcnn、Mask-Rcnn &#xff0c;多了预选框操作RPNOne-stage (单阶段)&#xff1a;YOLO 指标分析 精度 Precision 查准率&#xff0c;预测为正且实际…

亚马逊、lazada店铺销售策略揭秘:如何利用测评自养号突破瓶颈?

在跨境平台上&#xff0c;想要取得突破性的销售成绩并不容易。随着竞争的日益激烈&#xff0c;商家们需要采取有效的销售策略来突破销售瓶颈。本文将揭示三种结合测评自养号的销售策略&#xff0c;帮助卖家在跨境平台上取得更好的销售业绩。 一、建立完善的自养号评价体系 自…

git rebase (合并代码和整理提交记录)图文详解

git rebase详解&#xff0c;附带操作过程命令&#xff0c;运行图片 合并代码初始代码分支结构merge合并代码rebase合并代码 整理提交记录背景-整理提交记录步骤-图文详解 建议在看这篇文章之前一定要看完&#xff1a;git reset 命令详解 git revert命令详解。 看完上面的文章后…

基于scrcpy的Android群控项目重构,获取Android屏幕元素信息并编写自动化事件

系列文章目录 基于scrcpy的远程调试方案 基于scrcpy的Android群控项目重构 基于scrcpy的Android群控项目重构 进阶版 基于scrcpy的Android群控项目重构&#xff0c;获取Android屏幕元素信息并编写自动化事件&#xff08;视频&#xff09; 基于scrcpy的Android群控项目重构…

struct详解

导入 我们有没有这种情况&#xff0c;总想有一个数组&#xff0c;其中可以有int,double,char。。。各种类型&#xff0c;但是对于内置的数据类型显然是做不到的&#xff0c;于是就有了结构体类型 结构体是将多种不同的结构打包在一起&#xff0c;形成全新的类型进行使用 stru…

Spring的两种事务管理机制,面试这样答当场入职!

前言&#xff1a; 博主在最近的几次面试中&#xff0c;大中小厂都问到了Spring的事务相关问题&#xff0c;这块知识确实是面试中的重点内容&#xff0c;因此结合所看的书籍&#xff0c;在这篇文章中总结下。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读&#xff0c;感…

刻录到光盘功能看不见怎么办

刻录到光盘功能看不见怎么办 1、 打开组策略 同时按键WINR&#xff0c;打开运行对话框&#xff0c;输入gpedit.msc&#xff0c;打开组策略&#xff08;如果发现输入gpedit.msc后无法打开组策略&#xff0c;请参照文件后面的方法进行操作&#xff09; 2 、查找“删除CD刻录…

Java开发基础系列(五):对象方法参数

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(五)&#xff1a;对象方法参数 ⏱️ 创作时间&#x…

Pycharm 搭建 Django 项目,看完这一篇就够了

1. 安装需求 在使用 python 框架 Django 需要注意下面事项 Pycharm 版本是专业版而不是社区版本Pycharm 配置好了 python 解释器 &#xff08;一般我们现在用的都是python3&#xff09;我自己使用的是 Pycharm 版本是2020.1.2 2. 准备工作 2.1 新建项目 首先我们打开 Pycharm …

opencv -10 基础运算之 图像加权和(图像融合图像修复视频合成)

什么是图像加权和&#xff1f; 所谓图像加权和&#xff0c;就是在计算两幅图像的像素值之和时&#xff0c;将每幅图像的权重考虑进来&#xff0c;可以用公式表示为&#xff1a; dst saturate(src1 &#x1d6fc; src2 &#x1d6fd; &#x1d6fe;)式中&#xff0c;satu…

无缝集成:基于FastAPI实现AI模型服务与nacos的完美融合

1 场景介绍 当我们使用python构建AI模型算法的过程中&#xff0c;经常会遇到如下的问题&#xff1a; 这个模型如何提供给其他微服务调用&#xff08;比如JAVA构建的微服务&#xff09;&#xff1f;这个模型如何做到多个服务节点的负载均衡&#xff1f;这个模型如何做到服务的…

Python高光谱遥感数据处理与高光谱遥感机器学习方法深度应用

提供一套基于Python编程工具的高光谱数据处理方法和应用案例。 本文涵盖高光谱遥感的基础、方法和实践。基础篇&#xff0c;用通俗易懂的语言解释高光谱的基本概念和理论&#xff0c;深入理解科学原理。方法篇结合Python编程工具&#xff0c;专注于解决高频技术难题&#xff0c…