Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เวลาว่างของพนักงานใน C++


สมมติว่าเราได้ให้รายชื่อตารางเวลาของพนักงาน นี่แสดงถึงเวลาทำงานของพนักงานแต่ละคน ตอนนี้ สมมติว่าพนักงานแต่ละคนมีรายการของช่วงเวลาที่ไม่ทับซ้อนกัน ช่วงเวลาเหล่านี้จะถูกจัดเรียง เราต้องหารายการของช่วงเวลาจำกัดที่แสดงถึงเวลาว่างทั่วไปที่เป็นบวกสำหรับพนักงานทุกคน และนั่นก็จะเรียงลำดับด้วยเช่นกัน เรากำลังแสดงช่วงเวลาในรูปแบบ [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, ],]