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;
}
};