Linear scan after sorting. Please note sorting detail.

typedef std::pair<int, bool> Rec; class Solution { public: int minMeetingRooms(vector<Interval>& intervals) { vector<Rec> pts; for (int i = 0; i < intervals.size(); i++) { pts.push_back(Rec(intervals[i].start, true)); pts.push_back(Rec(intervals[i].end, false)); } std::sort(pts.begin(), pts.end(), [&](const Rec &r1, const Rec &r2){ if (r1.first < r2.first) return true; else if (r1.first == r2.first) return !r1.second && r2.second; return false; }); int ret = 0, curr = 0; for (auto &r : pts) { if (r.second) curr++; else curr--; ret = std::max(ret, curr); } return ret; } };