华为OD机试【路灯照明问题】(java)(100分)

devtools/2024/10/18 10:17:38/

1、题目描述

在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。
每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。

2、输入描述

第一行为一个数N,表示路灯个数,1<=N<=100000。
第二行为N个空格分隔的数,表示路径的照明半径,1<=照明半径<=100000*100。

3、输出描述

第一个路灯和最后一个路灯之间,无法照明的区间的长度和。
用例:

输入
3
20 70 30输出
10ps:
路灯1 覆盖0-20
路灯2 覆盖30-170
路灯3 覆盖170-230
没被覆盖的区间只有20~30

温馨提示!!!
华为OD机试考试官方会对考生代码查重。华为od机试因为有题库所以有很大的概率抽到原题。如果碰到了题库中的原题,千万不要直接使用题解中的代码,一定要做些修改,比如代码中的变量名,除此之外,代码的组织结构和逻辑也要进行一些改变,所以在日常的刷题中,要提前编写好属于自己的代码。

4、题解

定义一个集合用来记录每个灯的照明范围,并按照照明范围进行排序,优先按照左边范围升序范围排序,循环遍历灯照明范围集合,将当前节点的右边照明范围和下一个节点的左边照明范围比较,大于则需要将下一个节点的右边距离取两个节点的最大值,计算两个节点之间存在黑暗距离。
代码如下:

java">public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = Integer.parseInt(sc.nextLine());int[] arr = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();int res = 0;// 第一个灯与最后一个灯距离int max = (n-1) * 100;// 每个灯的照明范围List<List<Integer>> resList = new ArrayList<>();// 记录每个灯的照明范围for (int i=0; i<n; i++) {List<Integer> curList = new ArrayList<>();// 左边范围不小于总范围的最小长度int left = Math.max(0, i*100 - arr[i]);// 右边范围不大于总范围的最大长度int right = Math.min(max, i*100 + arr[i]);curList.add(left);curList.add(right);resList.add(curList);}// 根据灯的照明范围进行排序,优先按照左边范围升序排序resList = resList.stream().sorted((l1, l2) -> {if (l1.get(0).intValue() != l2.get(0).intValue()) {return l1.get(0) - l2.get(0);}return l1.get(1) - l2.get(1);}).collect(Collectors.toList());for (int i=0; i<n-1; i++) {List<Integer> cur = resList.get(i);List<Integer> next = resList.get(i+1);// 前节点的右边照明范围和下一个节点的左边照明范围比较if (cur.get(1) >= next.get(0)) {// 大于则需要将下一个节点的右边距离取两个节点的最大值next.set(1, Math.max(cur.get(1), next.get(1)));continue;}// 两个灯之间的黑暗距离res += (next.get(0) - cur.get(1));}System.out.println(res);
}

执行结果如下:
在这里插入图片描述


http://www.ppmy.cn/devtools/36382.html

相关文章

2024年如何下载51cto的视频

你是否对学习新的技术知识感到困惑&#xff1f;是否在寻找一个优质的在线学习平台&#xff1f;那么&#xff0c;我告诉你一个秘密——51cto视频平台&#xff01;它是一个专注于技术领域的视频平台&#xff0c;提供了大量的高质量视频资源。如果你想在2024年下载51cto的视频&…

数据库大作业——基于qt开发的图书管理系统(三)Qt连接Mysql数据库

前言 自从Oracle收购了Mysql对其进行了商业化之后&#xff0c;如今Mysql已经不能算一个完全开源的数据库了&#xff0c;而这明显是与Qt开源理念相违背的&#xff0c;所以Qt6中取消了对Mysql的默认支持&#xff0c;Qt6内不在内置Mysql的驱动(QMYSQL),这也导致了我们如果想要连接…

EasyExcel读取数据,并发送请求

1.导入实体类 package com.oristand.b2b.manage.web;import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter;Getter Setter EqualsAndHashCodepublic class TestData {Excel…

在Vue项目中,`App.vue`、`main.ts`(或`main.js`)以及`index.html`的作用

在Vue项目中&#xff0c;App.vue、main.ts&#xff08;或main.js&#xff09;以及index.html各自承担着不同的作用&#xff0c;它们共同协作以启动和运行Vue应用。下面是每个文件的具体作用和它们之间的区别&#xff1a; ### App.vue App.vue 是Vue应用的根组件&#xff0c;它…

推荐5个免费的国内平替版GPT

提起AI&#xff0c;大家第一个想到的就是GPT。 虽然它确实很厉害&#xff0c;但奈何于我们水土不服&#xff0c;使用门槛有些高。 不过随着GPT的爆火&#xff0c;现在AI智能工具已经遍布到各行各业了&#xff0c;随着时间的推移&#xff0c;国内的AI工具也已经“百花盛放”了…

Linux|如何管理多个Git身份

Linux&#xff5c;如何管理多个Git身份 目录组织 我将我的项目分为三个层级&#xff1a; 个人项目&#xff1a;这些存放在 ~/sources 目录下。工作项目&#xff1a;所有的专业项目都保存在 ~/work 目录中。客户特定项目&#xff1a;这些进一步组织在 ~/work 下的各自客户目录…

机器学习的两种典型任务

机器学习中的典型任务类型可以分为分类任务&#xff08;Classification&#xff09;和回归任务&#xff08;Regression&#xff09; 分类任务 回归任务 简单的理解&#xff0c;分类任务是对离散值进行预测&#xff0c;根据每个样本的值/特征预测该样本属于类 型A、类型B 还是类…

电脑设置在哪里打开?Window与Mac双系统操作指南

随着科技的不断发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;对于许多初学者来说&#xff0c;如何找到并熟悉电脑的设置界面可能是一个挑战。特别是对于那些同时使用Windows和Mac双系统的用户来说&#xff0c;更是需要一篇详尽的指南来…