给出飞机的起飞和降落时间的列表,用序列 interval 表示. 请计算出天上同时最多有多少架飞机?
扫描线
对所有起飞和降落时间点进行排序
扫描线检查每个点有多少架飞机 每到一个点 有起飞的飞机 天上飞机数量加1 有降落的减1
过程中最大值即为天上同时最多有多少架飞机
class Point{
int time;
int flag;
public Point(int time, int flag){
this.time = time;
this.flag = flag;
}
}
public int countOfAirplanes(List<Interval> airplanes) {
if(airplanes == null || airplanes.size() == 0)
return 0;
List<Point> list = new ArrayList<>();
for(Interval i : airplanes){
list.add(new Point(i.start, 1));
list.add(new Point(i.end, 0));
}
Collections.sort(list, new Comparator<Point>(){
public int compare(Point t1, Point t2){
if(t1.time == t2.time)
return t1.flag - t2.flag;
return t1.time - t2.time;
}
});
int count = 0;
int max = Integer.MIN_VALUE;
for(Point p : list){
if(p.flag == 1)
count++;
else{
count--;
}
max = Math.max(count, max);
}
return max;
}
}