150 / 205
LeetCode · MediumO'rta20 ball· ~30 daqiqa

Task Scheduler

Sizga CPU vazifalari ro'yxati tasks va n soni berilgan. n — bu bir xil turdagi ikki vazifa orasida bo'lishi zarur minimal pauza (idle cycle) miqdori.

Barcha vazifalarni bajarishga kerak bo'lgan minimal vaqt birliklarini toping. Agar CPU biror vaqt birligida bo'sh tursa, bu ham 1 birlik hisob qilinadi.

example.go
func solve(tasks []string, n int) int {
    // ...
}

Misollar

kod
Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
Tushuntirish: A -> B -> idle -> A -> B -> idle -> A -> B
kod
Input: tasks = ["A","C","A","B","D","B"], n = 1
Output: 6
kod
Input: tasks = ["A","A","A","B","B","B"], n = 3
Output: 10

Maslahatlar

  1. Vaqt jadvalini bevosita simulyatsiya qilish shart emas — eng ko'p takrorlanadigan vazifa qancha "bo'shliq" yaratishini matematik formula orqali hisoblashni o'ylab ko'ring.
  2. Har bir vazifaning chastotasini sanang, eng katta chastotani (maxFreq) va shu chastotaga ega vazifalar sonini (maxCount) toping; formula bo'yicha minimal vaqt (maxFreq-1)*(n+1) + maxCount ga teng bo'ladi, ammo agar umumiy vazifalar soni bundan katta bo'lsa (bo'shliqqa ehtiyoj yo'q holat), javob shunchaki vazifalar sonining o'ziga teng bo'ladi.