zoukankan      html  css  js  c++  java
  • 考研机试 25.剩下的树

    时间:2021/03/06

    一.题目描述

    有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。     现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。     可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

    输入描述

    两个整数L(1<=L<=10000)和M(1<=M<=100)。
    接下来有M组整数,每组有一对数字。

    输出描述

    可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

    题目链接

    https://www.nowcoder.com/practice/f5787c69f5cf41499ba4706bc93700a2?tpId=40&tqId=21356&rp=1&ru=%2Fta%2Fkaoyan&qru=%2Fta%2Fkaoyan%2Fquestion-ranking&tab=answerKey

    二.算法

    题解

    建立一个数组存储树,有树时相应下标数组元素为0,然后遍历移走树,即设置为-1,这里使用的时Arrays.fill算法,要注意该方法填充数组时是前闭后开,所以后面的下标要加1。

    重点

    Arrays类的fill方法在填充数组时是前闭后开的。

    代码

    import java.util.Scanner;
    import java.util.Arrays;
    
    public class Main{
        
        public static void main(String[] args){
            
            Scanner in = new Scanner(System.in);
            
            //读取输入
            int l = in.nextInt();
            int m = in.nextInt();
            int[] counts = new int[l + 1];
            int[] starts = new int[m];
            int[] ends = new int[m];
            for(int i = 0; i < m; i++){
                starts[i] = in.nextInt();
                ends[i] = in.nextInt();
            }
            
            //移走数
            for(int i = 0; i < m; i++){
                Arrays.fill(counts, starts[i], ends[i] + 1, -1);
            }
            
            //计算剩余树的数量
            int count = 0;
            for(int i = 0; i < l + 1; i++){
                if(counts[i] == 0){
                    count++;
                }
            }
            
            System.out.println(count);
        }
    }
  • 相关阅读:
    聊天工具分享bug
    Git命令查看代码提交次数
    短链接生成实例
    .Net MVC用户注册验证码
    js写验证码
    笔记
    jq获取数组中的某个字段拆分成字符串。
    IIS部署后中文Cookie乱码
    C#反射(Reflection)与特性(Attribute)实例
    jmm
  • 原文地址:https://www.cnblogs.com/machi12/p/14491310.html
Copyright © 2011-2022 走看看