สมมติว่ามีอาร์เรย์ของช่วงเวลาการประชุม มีเวลาเริ่มต้นและสิ้นสุดสองครั้ง[[s1,e1],[s2,e2],...] สองครั้งและแต่ละคู่เป็นไปตามกฎ (si
ดังนั้น หากอินพุตเป็น [[0, 30], [5, 10], [15, 20]] เอาต์พุตจะเป็น 2
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดลำดับความสำคัญ pq หนึ่งคิว
-
จัดเรียงอาร์เรย์ช่วงเวลา
-
ยกเลิก :=0
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของช่วงเวลา ให้อัปเดต (เพิ่ม i ขึ้น 1) ทำ -
-
ในขณะที่ (ไม่ใช่ pq ว่างเปล่าและองค์ประกอบด้านบนของ pq <=ช่วงเวลา[i, 0]) ทำ -
-
ลบองค์ประกอบออกจาก pq
-
-
แทรกช่วงเวลา[i] ลงใน pq
-
ret :=สูงสุดของ ret และขนาดของ pq
-
-
รีเทิร์น
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
#include <bits/stdc++.h> using namespace std; struct Comparator{ bool operator()(vector <int<& a, vector <int<& b){ return !(a[1] < b[1]); } }; class Solution { public: static bool cmp(vector <int< a, vector <int< b){ return (a[1] < b[1]); } int minMeetingRooms(vector<vector<int<>& intervals) { priority_queue<vector<int<, vector<vector<int< >, Comparator> pq; sort(intervals.begin(), intervals.end()); int ret = 0; for (int i = 0; i < intervals.size(); i++) { while (!pq.empty() && pq.top()[1] <= intervals[i][0]) pq.pop(); pq.push(intervals[i]); ret = max(ret, (int)pq.size()); } return ret; } }; main(){ vector<vector<int<> v = {{0, 30}, {5, 10}, {15, 20}}; Solution ob; cout << (ob.minMeetingRooms(v)); }
อินพุต
{{0, 30}, {5, 10}, {15, 20}}
ผลลัพธ์
2