สมมติว่าเราได้ให้รายชื่อตารางเวลาของพนักงาน นี่แสดงถึงเวลาทำงานของพนักงานแต่ละคน ตอนนี้ สมมติว่าพนักงานแต่ละคนมีรายการของช่วงเวลาที่ไม่ทับซ้อนกัน ช่วงเวลาเหล่านี้จะถูกจัดเรียง เราต้องหารายการของช่วงเวลาจำกัดที่แสดงถึงเวลาว่างทั่วไปที่เป็นบวกสำหรับพนักงานทุกคน และนั่นก็จะเรียงลำดับด้วยเช่นกัน เรากำลังแสดงช่วงเวลาในรูปแบบ [x, y] ตัวอย่างเช่น schedule [0][0].start =1, schedule[0][0].end =2
ดังนั้น หากอินพุตเหมือนกับกำหนดการ =[[[1,2],[5,6]],[[1,3]],[[4,10]]] เอาต์พุตตัวใดตัวหนึ่งจะเป็น [[ 3,4]].
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดอาร์เรย์ 2 มิติ v
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาดของกำหนดการ อัปเดต (เพิ่ม i ขึ้น 1) ทำ
-
สำหรับการเริ่มต้น j :=0 เมื่อ j
-
แทรกกำหนดการ[i, j] ที่ส่วนท้ายของ v
-
-
-
จัดเรียงอาร์เรย์ v
-
กำหนดอาร์เรย์ 2D ret หนึ่งรายการ
-
กำหนดอาร์เรย์ชั่วคราว :=v[0]
-
สำหรับการเริ่มต้น i :=0 เมื่อ i <ขนาด v อัปเดต (เพิ่ม i ขึ้น 1) ทำ -
-
ถ้า temp[0]
-
แทรก {temp[1], v[i, 0]} ที่ส่วนท้ายของ ret
-
อุณหภูมิ :=v[i]
-
-
มิฉะนั้น
-
temp :=(ถ้า temp[1]
-
-
-
รีเทิร์น
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
#includeใช้เนมสเปซ std;void print_vector(vector > v){ cout <<"["; for(int i =0; i a, vector b){ return a[0] > employeeFreeTime(vector >> ตาราง) { vector > v; สำหรับ (int i =0; i > ret; เวกเตอร์ อุณหภูมิ =v[0]; สำหรับ (int i =0; i >> v ={{{1,2},{5,6}},{{1,3}},{{4,10}}}; print_vector(ob.employeeFreeTime(v));}
อินพุต
<ก่อน>{{{1,2},{5,6}},{{1,3}},{{4,10}}}ผลลัพธ์
[[2, 1, ],[2, 1, ],[3, 4, ],[10, 5, ],]