【华为OD题库-085】路灯照明II-Java

题目

在一条笔直的公路上安装了N个路灯,从位置0开始安装,路灯之间间距固定为100米。

每个路灯都有自己的照明半径,请计算第一个路灯和最后一个路灯之间,无法照明的区间的长度和。输入描述

第一行为一个数N,表示路灯个数,1<=N<=100000

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

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

输入

2

50 50

输出

0

说明

路灯1覆盖0-50,路灯2覆盖50-100,路灯1和路灯2之间(0米-100米)无未覆盖的区间。
示例2:

输入

4

50 70 20 70

输出

20

说明

路灯1覆盖0-50

路灯2覆盖30-170

路灯3覆盖180-220

路灯4覆盖230-370

170,180\],\[220,230\],两个未覆盖的区间,总里程为20

思路

简单逻辑分析题

每个路灯的坐标为:i*100,照射范围为:[i*100-nums[i],i*100+nums[i]]

如果当前路灯照射范围的起始值比上一个路灯照射范围的结尾值还要大,那么说明这一部分距离无法覆盖:当前start-上一个end

最后累加未覆盖距离输出即可

题解

java 复制代码
package hwod;

import java.util.Scanner;

public class LampCoverageDistance {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < n; i++) {
            nums[i] = sc.nextInt();
        }
        System.out.println(lampCoverageDistance(nums));
    }

    private static int lampCoverageDistance(int[] nums) {
        int res = 0;
        int start = 0, end = 0;
        for (int i = 0; i < nums.length; i++) {
            if (i == 0) {
                end += nums[i];
            } else {
                start = i * 100 - nums[i];
                if (start > end) {
                    res += start - end;
                }
                end = i * 100 + nums[i];
            }
        }

        return res;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

相关推荐
爱由芯生几秒前
JFinal加密你值得学习
java
MacroZheng3 分钟前
横空出世!一款开源的数据同步工具,稳定又高效,好用到爆!
java·后端·mysql
你想考研啊10 分钟前
部署tomcat应用时注意事项
java·tomcat
喵手17 分钟前
Java中的垃圾回收机制(GC),你知道如何优化吗?
java·后端·java ee
ldrtech20 分钟前
雪花id的生成与应用问题处理
java
灵魂猎手24 分钟前
7. MyBatis 的 ResultSetHandler(一)
java·后端·源码
AAA修煤气灶刘哥27 分钟前
手把手教你全流程项目部署:从 Jenkins 到 Nginx 的项目实战手册
java·运维·后端
种子q_q27 分钟前
java中static 关键字详解
java·后端·面试
Seven971 小时前
剑指offer-23、搜索⼆叉树的后序遍历序列
java
咕噜签名分发冰淇淋1 小时前
签名应用APP分发平台的微服务化部署是什么?其有哪些优势?
java·运维·微服务