您的位置:首页 > 其它

lintcode:数飞机

2015-10-12 10:16 344 查看

数飞机

给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?

如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。

样例

对于每架飞机的起降时间列表:
[[1,10],[2,3],[5,8],[4,7]]
, 返回
3


解题

参考链接

利用HashMap记录每个时刻的飞机数量

利用set记录时间点

最后对set 的每个时间点,找出连续时间点飞机数量和最大的那个时间段

/**
* 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
if(airplanes == null || airplanes.size() == 0)
return 0;
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
Set<Integer> set = new TreeSet<Integer>();// 记录此时刻的飞机数量
for(int i =0;i<airplanes.size();i++){
int s = airplanes.get(i).start;
int e = airplanes.get(i).end;
if(map.containsKey(s))
map.put(s,map.get(s) + 1);// 空中的飞机 + 1
else
map.put(s,1);
if(map.containsKey(e))
map.put(e,map.get(e) - 1);// 空中飞机 - 1
else
map.put(e,-1);
set.add(s);// 该时间点的飞机数 set是升序排序的
set.add(e);
}
Iterator it = set.iterator();
int maxAirNo = Integer.MIN_VALUE;
int curcount = 0;
Iterator<Integer> tmp = set.iterator();
while(tmp.hasNext()){
curcount += map.get(tmp.next());  // 从最小时间点开始找出连续最长的飞机数和
maxAirNo = Math.max(maxAirNo, curcount);
}

return maxAirNo;
}
}


改成这样的好理解点

public class Solution {
/**
* @param n n pairs
* @return All combinations of well-formed parentheses
*/
public ArrayList<String> generateParenthesis(int n) {
// Write your code here
ArrayList<String> result  = new ArrayList<String>();
if(n<=0)
return result;
int left = 0,right=0;
String str="";
generateParenthesis(n,left,right,str,result);
return result;
}
public void generateParenthesis(int n,int left,int right,String str ,ArrayList<String> result){
// left == n 的时候只能加右括号
if(left == n){
for(int i=0;i< n- right;i++)
str+=")";
result.add(str);
return;
}
// left >= right 左括号 右括号都可以添加
if(left>=right){
generateParenthesis(n, left+1, right,str+"(",result); // left 长度加一
generateParenthesis(n, left, right+1,str+")",result); // right 长度加一
}else // left< right 失败
return;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: