华为OD机试题【路灯照明】用 Java 解 | 含解题说明

在这里插入图片描述

华为Od必看系列

  1. 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南
  2. 华为od机试,独家整理 已参加机试人员的实战技巧
  3. 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单
  4. 华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典

本篇题目:路灯照明

题目

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

输入

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

输出描述

无法照明的区间的长度和。

示例一

输入

2
50 50

输出

0

示例二

输入

4
50 70 20 70

### 华为Java 真题及相关练习 华为OD试对于编程语言的选择并没有严格限制,但基于大多数应聘者的实际情况和技术背景,Java 被认为是一个相对合适的选择[^1]。以下是关于华为试中的 Java 真题以及相关练习的内容。 #### 一、真题分类 根据已有的资料整理,华为OD试的题目通常分为以下几个类别: - **字符串处理** - **数组操作** - **动态规划** - **贪心算法** - **图论** 这些类型的题目覆盖了计算科学的基础知识点,并且考察的是实际问题的能力而非单纯的理论记忆。 #### 二、经典真题析——“2022Q4 路灯照明问题” 这是一道典型的华为OD试题,难度较高,能够很好地反映其考查重点。 ##### 题目描述 给定一条街道上的若干盏路灯及其对应的亮度范围,求最少需要开启多少盏路灯才能照亮整条街。 ##### 输入描述 输入包多组测试数据,每组测试数据的第一行为两个正整数 N 和 L (N ≤ 1e5, L ≤ 1e9),分别表示路灯的数量和街道长度;接下来的一行有 N 对整数 ai bi (-L/2 ≤ ai ≤ L/2, 0 < bi ≤ L),其中 ai 表示第 i 盏路灯的位置坐标,bi 表示该路灯能照射的最大距离。 ##### 输出描述 输出一个整数,即满足条件所需的最小路灯数量。 ##### 解题思路 此问题可以通过贪心策略决。具体来说,先按照路灯位置排序,然后依次选取当前未被覆盖区域中最优的一个路灯进行点亮,直到整个区间都被完全覆盖为止[^2]。 ##### Java 实现代码 以下提供了上述问题的一种可能实现方式: ```java import java.util.*; public class StreetLight { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); // 路灯数目 long l = scanner.nextLong(); // 街道总长 List<int[]> lights = new ArrayList<>(); for(int i=0;i<n;i++) { int a = scanner.nextInt(); int b = scanner.nextInt(); lights.add(new int[]{a,b}); } Collections.sort(lights,(o1,o2)->{ if(o1[0]!=o2[0]) return o1[0]-o2[0]; else return o1[1]-o2[1]; }); long start = -l / 2; long end = -l / 2; int count = 0; int index = 0; while(end<l/2){ long maxEnd=-l/2; boolean flag=false; while(index<lights.size() && lights.get(index)[0]<=end+lights.get(index)[1]){ if(start<=lights.get(index)[0]-(long)lights.get(index)[1]){ maxEnd=Math.max(maxEnd,lights.get(index)[0]+(long)lights.get(index)[1]); flag=true; } index++; } if(!flag){ System.out.println(-1);return ; }else{ count++; end=maxEnd; } } System.out.println(count); } } ``` 以上代码实现了通过贪心法计算所需最少路灯数量的功能[^2]。 #### 三、其他推荐练习题 除了上述提到的经典试题外,还可以尝试以下几种常见类型的问题作为额外训练材料: 1. 字符串匹配与替换; 2. 数组旋转或翻转; 3. 最短路径寻找; 4. 排序算法优化实践等。 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想橡皮擦

如有帮助,来瓶可乐

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值