华为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
*
* 解释:
*
* 路灯1 覆盖0-50
*
* 路灯2 覆盖30-170
*
* 路灯3 覆盖180-220
*
* 路灯4 覆盖230-370
*
* 输出
*
* 20
*
* 说明
*
* [170,180],[220,230],两个未覆盖的区间,总里程为20
*/

public class StreetLighting {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int lightNum = Integer.parseInt(sc.nextLine());
        List radius = new ArrayList<>();
        for (int i = 0; i < lightNum; i++){
            radius.add(sc.nextInt());
        }
        int range = rang(radius);
        System.out.println(range);
    }

    public static int rang(List radis){
        int range = 0;
        int left;
        int right = radis.get(0);
        int beforeRight = right;
        for (int i = 1; i < radis.size(); i++) {
            int value = 100 * (i);
            left = value - radis.get(i);
            right = value + radis.get(i);
            if (left > beforeRight) {
                range = range + (left - beforeRight);
            }
            beforeRight = right;
        }
        return range;
    }
}

你可能感兴趣的:(华为OD最新机试真题训练题,华为od,java)