给定坐标轴上的一组线段,线段的起点和终点均为整数并且长度不小于1,请你从中找到最少数量的线段,这些线段可以覆盖住所有线段。
第一行输入为所有线段的数量,不超过10000,后面每行表示一条线段,格式为"x,y",x和y分别表示起点和终点,取值范围是[-105,105]。
最少线段数量,为正整数。
public static void main(String[] args) {
Node[] arr = new Node[10000];
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 0; i < n; i++) {
String[] s = sc.next().split(",");
arr[i] = new Node(Integer.parseInt(s[0]), Integer.parseInt(s[1]));
}
Arrays.sort(arr, 0, n - 1);
if (n == 0) {
System.out.println(0);
} else {
int ret = 1;
int right = arr[0].r;
int maxRight = arr[0].r;
for (int i = 1; i < n; i++) {
if (arr[i].l > right) {
if (maxRight > right) {
ret++;
right = maxRight;
}
if (maxRight < arr[i].l) {
ret++;
right = arr[i].r;
}
}
maxRight = Math.max(arr[i].r, maxRight);
}
if (maxRight > right) {
ret++;
}
System.out.println(ret);
}
}
static class Node implements Comparable<Node> {
int l, r;
public Node(int l, int r) {
this.l = l;
this.r = r;
}
@Override
public int compareTo(Node o) {
if (l == o.l) {
return o.r - r;
}
return l - o.l;
}
}
3
1,5
3,6
5,7
2
选取2条线段[1,5]和[5,7]即可,这两条线段可以覆盖[3,6]。
下一篇:华为OD机试真题 Java 实现【跳房子II】【2023 B卷 100分】,附详细解题思路
本文收录于,华为OD机试(JAVA)(2022&2023)
本专栏包含了最新最全的2023年华为OD机试真题,有详细的分析和Java解答。已帮助1000+同学顺利通过OD机考。专栏会持续更新,每天在线答疑。