http://www.1point3acres.com/bbs/thread-177983-1-1.html
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。
把所有的startTime和stopTime排序过一遍。碰到start当前interval数+1,否则-1,算出最大的interval overlap数。接下来具体最多的overlap在哪里也很容易找吧
http://blog.5ibc.net/p/52775.html
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。
把所有的startTime和stopTime排序过一遍。碰到start当前interval数+1,否则-1,算出最大的interval overlap数。接下来具体最多的overlap在哪里也很容易找吧
http://blog.5ibc.net/p/52775.html
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; }
这题就是LC上面的meeting rooms换了马甲。meeting rooms求最少需要多少个room,也就是某个时刻有几个并行的会议,这个题目求时刻有最大的并行interval数量,差不多,按照start time排一遍,再用一个heap放结束时间就可以了 |
- def integraltimestamps2(intervals):.鏈枃鍘熷垱鑷�1point3acres璁哄潧
- intvs = sorted(intervals, key = lambda x : x[0])
- edges = sorted([intv[0] for intv in intervals]+[intv[1] for intv in intervals])
- results = []. visit 1point3acres.com for more.
- moccurs = 0
- ongoing = []
- intvid = 0
- for e in edges:. 鍥磋鎴戜滑@1point 3 acres
- if results and len(ongoing) == moccurs:
- results += range(results[-1]+1,e)
- while ongoing and e >= ongoing[0]:
- heapq.heappop(ongoing). 1point 3acres 璁哄潧
- while intvid < len(intvs) and e >= intvs[intvid][0]:
- heapq.heappush(ongoing, intvs[intvid][1]). from: 1point3acres.com/bbs
- intvid += 1
- if len(ongoing) > moccurs:
- moccurs = len(ongoing)
- results = [e]
- elif len(ongoing) == moccurs:.鏈枃鍘熷垱鑷�1point3acres璁哄潧
- results.append(e)
- return results