class Solution { public: static bool cmp(vector<int> &a, vector<int> &b){ if(a[0]!=b[0]) return a[0]<b[0]; else return a[1]<b[1]; } int maxEvents(vector<vector<int>>& events) { if(events.size()==0) return 0; sort(events.begin(), events.end(), cmp); priority_queue<int ,vector<int>, greater<int>> minheap; vector<int> temp; temp = {events[0][0], events[0][1]}; int cot = 0; int j = 0; for(int i = 1; i <= 1e5; i++){ // i 代表第几天 // 将开始时间等于i的结束时间加入堆 while(j<events.size()&&events[j][0]==i){ // minheap.push(events[j++][1]); } // 将结束时间小于今天的,弹出堆 while(!minheap.empty()&& minheap.top()<i){ minheap.pop(); } // 当前堆不空,则当前堆顶是结束时间最短的,结果加1,再将堆顶弹出 if(!minheap.empty()){ cot++; minheap.pop(); } } return cot; } };