[Facebook 面试题]Meeting roomII 变形题

32 篇文章 0 订阅

facebook 二面题目:

interval [startTime, stoptime)   ----integral  time stamps
给这样的一串区间 I1, I2......In  
找出 一个 time stamp  出现在interval的次数最多。
startTime <= t< stopTime 代表这个数在区间里面出现过。

example:  [1,3),  [2, 7),   [4,  8),   [5, 9)
5和6各出现了三次, 所以答案返回5,6。


class Solution {
public:
     vector<int> findTimeStamp(vector<pair<int,int>>& intervals) {
	                vector<int> res;
	                int len=intervals.size();
			if(len==0) return res;
	                vector<int> start(len);
		        vector<int> end(len);
			for(pair<int,int> interval:intervals) {
			      start.push_back(interval.first);
				  end.push_back(interval.second-1);
			}
			sort(start.begin(),start.end());
			sort(end.begin(),end.end());
			int available=0;
			int sIndex=1,eIndex=0;
			int ss=start[0],ee=end[0];
			while(sIndex<len&&eIndex<len) {
			      while(start[index]>=end[eIndex]) {
				       available++;
					   eIndex++;
			      }
			      if(start[sIndex]<end[eIndex]) {
				       if(available<=0) {
						ss=start[sIndex];  //记录起点和终点
						ee=end[eIndex];
					   }
					   else {
					        available--;
					   }
			     }
		             sIndex++;
			}
			for(int i=ss;i<=ee;i++) {
			    res.push_back(i);
			}
			return res;
	 }  
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值