给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?
注意事项:如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。
样例:对于每架飞机的起降时间列表:[(1,10),(2,3),(5,8),(4,7)]
, 返回3
。
解题思路:从时间轴上观察飞机的起落状况,如:[(1,10),(2,3),(5,8),(4,7)]的时间轴为 1,2,3,4,5,7,8,10。在每个时间点,判断有几架飞机在空中飞行。
在时间点 1 时刻, 飞机->起飞 此时在天上的飞机数: 1
在时间点 2 时刻, 飞机->起飞 此时在天上的飞机数: 2
在时间点 3 时刻, 飞机->降落 此时在天上的飞机数: 1
在时间点 4 时刻, 飞机->起飞 此时在天上的飞机数: 2
在时间点 5 时刻, 飞机->起飞 此时在天上的飞机数: 3
在时间点 7 时刻, 飞机->降落 此时在天上的飞机数: 2
在时间点 8 时刻, 飞机->降落 此时在天上的飞机数: 1
在时间点 10 时刻,飞机->降落 此时在天上的飞机数: 0
同时在天上的飞机最大的数: 3
def countOfAirplanes(airplanes):
# write your code here
max_count = 0 #同时在天上的飞机最大的数
count = 0 # 在天上的飞机数
count_airplanes_total = len(airplanes)
start_time = [] #起飞时间
end_time = [] #降落时间
if count_airplanes_total > 0:
for i in range(count_airplanes_total):
#start_time.append(airplanes[i][0])
#end_time.append(airplanes[i][1])
start_time.append(airplanes[i].start)
end_time.append(airplanes[i].end)
start_end = start_time + end_time
start_end_sorted = sorted(start_end)
#print(start_end_sorted)
start_time_sorted = sorted(start_time)
#print(start_time_sorted)
end_time_sorted = sorted(end_time)
#(end_time_sorted)
j = 0
k = 0
print(start_time_sorted[0],'-',end_time_sorted[-1])
for i in start_end_sorted:
if i == end_time_sorted[k]:
count = count - 1
k = k + 1
#print('在时间点',i,'时刻,飞机->降落',end=' ')
elif i == start_time_sorted[j]:
count = count + 1
j = j + 1
#print('在时间点',i,'时刻,飞机->起飞',end=' ')
#print('此时在天上的飞机数:',count)
if max_count < count:
max_count = count
#print('同时在天上的飞机最大的数:',max_count)
return max_count
else:
return 0