สมมติว่าเรามีรายการจำนวนเต็มชื่อ tasks แต่ละสมาชิกแทนประเภทงานต่างกัน เรายังมีจำนวนเต็มไม่ติดลบ k แต่ละงานใช้เวลา 1 หน่วย และต้องทำตามลำดับที่ถูกต้อง แต่ต้องมีช่วงเวลา k หน่วยระหว่างการทำงานประเภทเดียวกันสองครั้ง ทุกเวลา เราสามารถทำงานหรือรอได้ เราต้องหาเวลาทั้งหมดที่ใช้ทำงานทั้งหมด
เช่น ถ้าอินพุตคือ tasks = [0, 1, 1, 2], k = 2 ผลลัพธ์จะเป็น 6 เพราะงานแรกสองงานประเภทต่างกัน ทำได้ทันที ตอนเวลา 2 งานถัดไปประเภทเดียวกัน ต้องรอ 2 ช่วงเวลา แล้วทำงาน แล้วงานประเภท 2 ทำได้เลย รูปแบบคือ [0, 1, wait, wait, 1, 2] ต้องใช้ 6 ช่วงเวลา
ขั้นตอนการแก้ปัญหา
tick := 0slot := แมปใหม่- สำหรับแต่ละ
tในtasks:tf := slot[t] ถ้า t ใน slot- ถ้า
tfไม่เป็น None และtf - tick > 0ให้tick := tick + tf - tick tick := tick + 1slot[t] := tick + k
- คืนค่า
tick
ตัวอย่างการใช้งาน
def solve(tasks, k):
tick = 0
slot = {}
for t in tasks:
tf = slot.get(t)
if tf is not None and tf - tick > 0:
tick += tf - tick
tick += 1
slot[t] = tick + k
return tick
tasks = [0, 1, 1, 2]
k = 2
print(solve(tasks, k))
อินพุต
[0, 1, 1, 2]
เอาต์พุต
6