สมมติว่าเรามีรายการช่วงสองมิติโดยที่แต่ละช่วงมีค่าสองค่า [start, end] เราต้องค้นหาว่ามีช่วงที่มีช่วงอื่นหรือไม่
ดังนั้น หากอินพุตเป็น [[2,4],[5,11],[5,9],[10,10]] ผลลัพธ์จะเป็นจริงเนื่องจาก [5,11] มี [5, 9].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
จัดเรียงอาร์เรย์ v
-
กำหนดอาร์เรย์ 2D ret หนึ่งรายการ
-
สำหรับแต่ละช่วงเวลาใน v -
-
ถ้า ret ว่างเปล่า −
-
ใส่ท้าย ret
-
-
มิฉะนั้นเมื่อองค์ประกอบสุดท้ายของ ret>=it[0] แล้ว −
-
คืนความจริง
-
-
มิฉะนั้น
-
ใส่ท้าย ret
-
-
-
คืนค่าเท็จ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#includeusing namespace std;class Solution { public:bool static cmp(vector &a, vector &b) { return a[1] ==b[1] ? a[0]> b[0] :a[1] > &v) { sort(v.begin(), v.end(), cmp); เวกเตอร์<เวกเตอร์ > ret; สำหรับ (อัตโนมัติ &it :v) { if (ret.empty()) ret.push_back(it); else if (ret.back()[0]>=it[0]) คืนค่าเป็น true; อื่น ret.push_back(มัน); } คืนค่าเท็จ }};main() { โซลูชัน ob; เวกเตอร์<เวกเตอร์ > v ={{2,4},{5,11},{5,9},{10,10}}; cout <<(ob.solve(v));}
อินพุต
<ล่วงหน้า>{{2,4},{5,11},{5,9},{10,10}}ผลลัพธ์
1