Middle
/* Kinoda joylar bitta qator bo'ylab joylashgan. Yangi kelgan tomoshabin joyni tanlaydi, shunda u boshqa tomoshabinlardan maksimal uzoqlikda o'tiradi. Ya'ni, u o'tiradigan joydan unga eng yaqin tomoshabinga bo'lgan masofa maksimal bo'lishi kerak. Har doim bo'sh joylar borligi va kamida bitta tomoshabin o'tirganligi kafolatlanadi. Berilgan joylar qatoriga (nol va birlardan iborat massiv) asoslangan holda, tanlangan joydan bo'lgan masofani qaytaradigan funktsiya yozing. Input: [1, 0, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0] Output: 1 */
sobes.tech AI
AIdan javob
Funktsiya bo'sh joy (nol bilan indeks) topishi kerak, u yerda eng yaqin band joy (birlar) bilan masofa maksimal bo'ladi.
Yechim g'oyasi:
- Array bo'ylab yurib, har bir bo'sh joy uchun eng yaqin band joyga bo'lgan masofani hisoblang.
- Bu maksimal masofani qaytaring.
Optimal usul — faqat bitta o'tish bilan chap va o'ngdagi eng yaqin birlarga bo'lgan masofalarni hisoblash.
Go tilida misol:
func maxDistance(joylar []int) int {
n := len(joylar)
chapDist := make([]int, n)
o'ngDist := make([]int, n)
// Chapdagi eng yaqin band joyga bo'lgan masofalarni to'ldirish
dist := n
for i := 0; i < n; i++ {
if joylar[i] == 1 {
dist = 0
} else {
dist++
}
chapDist[i] = dist
}
// O'ngdagi eng yaqin band joyga bo'lgan masofalarni to'ldirish
dist = n
for i := n - 1; i >= 0; i-- {
if joylar[i] == 1 {
dist = 0
} else {
dist++
}
o'ngDist[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if joylar[i] == 0 {
// Eng yaqin tomoshabinga bo'lgan minimal masofa
d := chapDist[i]
if o'ngDist[i] < d {
d = o'ngDist[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
Shu tarzda, funksiya tanlangan joy uchun eng yaqin tomoshabinga bo'lgan maksimal masofani qaytaradi.