OD 路灯照明问题


题目描述:
在一条笔直的公路上安装了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
说明:
[170,180],[220,230],两个未覆盖的区间,总里程为20
public class 路灯照明问题 {
    public static int calculateUnilluminatedLength(int[] radii) {
        int maxCover = 0;

        // 计算路灯能够覆盖的最大范围
        for (int radius : radii) {
            maxCover = Math.max(maxCover, radius);
        }

        Arrays.sort(radii); // 对路灯半径进行排序

        int unilluminatedLength = 0;
        for (int i = 0; i < radii.length - 1; i++) {
            // 找出无法被覆盖的区间
            unilluminatedLength += radii[i + 1] - radii[i];
        }

        // 减去最左边和最右边的路灯覆盖的范围
        return unilluminatedLength - (maxCover - radii[0]) - (maxCover - radii[radii.length - 1]);
    }

    // 从控制台读取路灯个数和路灯照明半径,然后将这些半径存储在一个整型数组中。
    // 接着,它调用 calculateUnilluminatedLength 方法来计算第一个路灯和最后一个路灯之间无法照明的区间的长度。
    // 在 calculateUnilluminatedLength 方法中,我们首先找到路灯能够覆盖的最大范围,
    // 然后对路灯半径进行排序,找到无法被覆盖的区间,最后减去最左边和最右边的路灯覆盖的范围,得到无法照明的区间长度。
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入路灯个数:");
        int N = scanner.nextInt();
        scanner.nextLine();

        System.out.println("请输入" + N + "个空格分隔的照明半径:");
        int[] radii = Arrays.stream(scanner.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        int result = calculateUnilluminatedLength(radii);
        System.out.println("第一个路灯和最后一个路灯之间,无法照明的区间的长度为:" + result);
    }
}

你可能感兴趣的:(OD,算法,java,开发语言,OD)