สมมติว่าเรามีรายการช่วงจำนวนเต็มโดยที่แต่ละองค์ประกอบมีช่วงเวลาเช่น [เริ่ม, สิ้นสุด] เราต้องหาจำนวนที่เกิดขึ้นบ่อยที่สุดเป็นระยะ หากเสมอกัน ให้คืนจำนวนที่น้อยที่สุด
ดังนั้น หากอินพุตเป็น [[2, 5],[4, 6],[7, 10],[8, 10]] ผลลัพธ์จะเป็น 4
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดหนึ่งแผนที่ m
-
cnt :=0, val :=0
-
สำหรับแต่ละค่าใน x -
-
(เพิ่ม m[it[0]] ขึ้น 1)
-
ลด m[it[1] + 1] ลง 1
-
-
ล่าสุด :=0
-
สำหรับแต่ละคีย์ใน m
-
สุดท้าย :=สุดท้าย + ค่าของมัน
-
ถ้าสุดท้าย> cnt แล้ว:
-
cnt :=สุดท้าย
-
val :=มัน
-
-
-
ค่าส่งคืน
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#includeใช้เนมสเปซ std;class Solution { สาธารณะ:int แก้ปัญหา (vector >&x) { แผนที่ m; int cnt =0; ค่า int =0; สำหรับ(อัตโนมัติ&มัน :x){ m[it[0]]++; ม[มัน[1] + 1]--; } int สุดท้าย =0; for(auto&it :m){ สุดท้าย +=it.second; if(last> cnt){ cnt =สุดท้าย; val =it.first; } } ค่าส่งคืน; }};main() { โซลูชัน ob; เวกเตอร์<เวกเตอร์ > v ={{2, 5},{4, 6},{7, 10},{8, 10}}; ศาล < อินพุต -
<ก่อน>{{2, 5},{4, 6},{7, 10},{8, 10}}
ผลลัพธ์
4