明天Java上机考试,今天初学Java,今日成果:学会了Java的输入输出,明天考试,未来可期。
题目描述
描述
有一些球形气球在一堵用XY平面表示的墙面上。墙面上的气球记录在整数数组points,其中points[i]=[x_start,x_end]表示水平直径在x_start和x_end之间的气球。你不知道气球的确切y坐标。
一支弓箭可以沿着x轴从不同点完全垂直地射出。在坐标x处射出一支箭,若有一个气球的直径的开始和结束坐标为x_start,x_end,且满足x_start <= x <= x_end,则该气球会被引爆。可以射出的弓箭的数量没有限制。弓箭一旦被射出后,可以无限地前进。
输入:
第一行是一个整数N,表示气球的数目。
接下来的N行,每行为一个气球的开始和结束坐标
输出:
打印引爆所有气球所必须射出的最小弓箭数。
示例1:
输入:
4
10 16
2 8
1 6
7 12
输出:
2
解释:气球可以用2支箭来爆破:
- 在x=6处射出箭,击破气球[2,8]和[1,6]
- 在x=11处射出箭,击破气球[10,16]和[7,12]
示例2:
输入:
4
1 2
2 3
3 4
4 5
输出:
2
解释:气球可以用2支箭来爆破:
- 在x = 2处发射箭,击破气球[1,2]和[2,3]
- 在x = 4处射出箭,击破气球[3,4]和[4,5]
提示:
- points.length <= 100
- points[i].length == 2
- -100 <= x_start < x_end <= 100
样例输入输出
样例2
输入:
4
1 2
2 3
3 4
4 5
输出:
2
样例1
输入:
4
10 16
2 8
1 6
7 12
输出:
2
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static class Points {
public int x_start;
public int x_end;
public Points(int x_start, int x_end) {
this.x_start = x_start;
this.x_end = x_end;
}
public int getX_start() {
return x_start;
}
public int getX_end() {
return x_end;
}
public static class myComparator implements Comparator<Points> {
public int compare(Points p1, Points p2) {
return p2.x_end - p1.x_end;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
ArrayList<Points> points = new ArrayList<>();
for (int i = 0; i < N; i++)
{
int x_start = sc.nextInt();
int x_end = sc.nextInt();
Points point = new Points(x_start, x_end);
points.add(point);
}
Collections.sort(points, new Points.myComparator());
int num = 0 ;
int j = 1;
for (int i = 0; i < N;)
{
while ( i + j < N && points.get(i).getX_start() <= points.get(i + j).getX_end())
{
j++;
}
num++;
i += j;
j = 1;
}
System.out.println(num);
}
}