某校大门外长度为 ll 的马路上有一排树,每两棵相邻的树之间的间隔都是 11 米。我们可以把马路看成一个数轴,马路的一端在数轴 00 的位置,另一端在 ll 的位置;数轴上的每个整数点,即 0,1,2,\dots,l0,1,2,…,l,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
代码
import java.util.*;
public class Main {public static void main(String args[]){int l,n;Scanner sc = new Scanner(System.in);l = sc.nextInt();//马路长度n = sc.nextInt();//区域数目int[] ar = new int[l+1];//这里数组长度要加1因为树木有(l+1)棵for(int i = 0;i<n;i++){int x = sc.nextInt();//第i个区域起始坐标int y = sc.nextInt();//第i个区域终止位置for(int j = x;j<=y;j++){ar[j] = 1;//将区域内的坐标置1,定义数组时默认为0}}int count = 0;for(int k = 0;k<=l;k++){if(ar[k]==0)count++;//统计没有被移除的树木}System.out.println(count);}}
这里有两重循环,还好时间没有超时,一定还有更好的方法