描述:
给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?
样例:
对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]]
, 返回3
。
思路:
统计每个时刻起飞降落的数量,最后累加,要对时间进行排序,按照时间先后读取数据,用hashset去重
/**
* Definition of Interval:
* public classs Interval {
* int start, end;
* Interval(int start, int end) {
* this.start = start;
* this.end = end;
* }
* 记录变化量 最后累加统计最大值
*/
class Solution {
/**
* @param intervals: An interval array
* @return: Count of airplanes are in the sky.
*/
public int countOfAirplanes(List<Interval> airplanes) {
// write your code here
int result = 0;
HashMap<Integer , Integer> record = new HashMap<Integer , Integer>();
HashSet<Integer> count = new HashSet<Integer>();
for(int i = 0;i<airplanes.size();i++){
int start = airplanes.get(i).start;
int end = airplanes.get(i).end;
if(record.containsKey(start)){
record.put(start , record.get(start) + 1);
}else{
record.put(start , 1);
}
if(record.containsKey(end)){
record.put(end , record.get(end) - 1);
}else{
record.put(end , - 1);
}
count.add(start);
count.add(end);
}
ArrayList<Integer> temp = new ArrayList<>();
for(Integer m : count){
temp.add(m);
}
Collections.sort(temp);
int sum = 0;
for(Integer e : temp){
sum += record.get(e);
result = Math.max(result , sum);
}
return result;
}
}