路灯照明II_100分_B卷_区间问题/逻辑分析模拟

路灯照明II

题目描述:

在一条笔直的公路上安装了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

解题思路:

这题目可以使用按照传统的区间合并的方式进行,但是也可以根据题目的特点来做。
题目中说明:路灯是每隔100米安装一个,每隔灯泡的照明半径在对应的数组中。
那么由此可知,没有被照明到的空隙一定在相邻的两个灯泡之间——那如何判断两个灯泡之间是否存在没有被照明到的区间呢,那就是直接将两个灯泡的半径相加,如果相加结果 >= 两灯泡之间的距离(100),则不存在没有被照明的区间;如果相加结果 < 两灯泡之间的距离(100),那么说明这两个灯泡之间有区间未被照明到
在这里插入图片描述

代码:

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int n = Integer.parseInt(scanner.nextLine());
    // 直接将输入转换成数组
    int[] array = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
    int count = 0;

    // 统计两两灯泡之间没有被照明到的区间距离总和
    for (int i = 1; i < n; i++) {
        // 如果两灯泡的照明半径之和 < 两灯安装距离,则存在无法照明的区间 = 100 - 两灯的半径之和
        if (array[i] + array[i - 1] < 100) {
            count += 100 - array[i] - array[i - 1];
        }
    }

    System.out.println(count);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值