Intern
""" Kinozaldagi joylar bir qator bo'lib joylashgan. Yangi kelgan tomoshabin o'z joyini tanlaydi, qolgan tomoshabinlardan maksimal uzoqlikda o'tirish uchun. Ya'ni, u joydan, eng yaqin tomoshabinga bo'lgan masofa maksimal bo'lishi kerak. Har doim bo'sh joylar borligi va kamida bitta tomoshabin o'tirganligi kafolatlangan. Berilgan joylar qatorida (nol va birlardan iborat) tanlangan joydan eng yaqin tomoshabinga bo'lgan masofani (o'rindiqlar orasidagi bo'sh joylar soni) qaytaradigan funktsiya yozing. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """
sobes.tech Süni İntellekt
AI-dan cavab
go package main
import ( "fmt" "math" )
func maxDistance(seats []int) int { maxDist := 0 lastOccupied := -1
for i, seat := range seats {
if seat == 1 {
if lastOccupied == -1 {
// sıra başından ilk dolu yere olan mesafe
maxDist = i
} else {
// iki dolu arasındaki mesafe
midDist := (i - lastOccupied) / 2
if midDist > maxDist {
maxDist = midDist
}
}
lastOccupied = i
}
}
// son dolu yerden sıra sonuna olan mesafe
tailDist := len(seats) - 1 - lastOccupied
if tailDist > maxDist {
maxDist = tailDist
}
return maxDist
}
func main() { fmt.Println(maxDistance([]int{1, 0, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0, 0, 1, 0, 0, 1})) // 2 fmt.Println(maxDistance([]int{1, 0, 1, 0})) // 1 }
İzah:
- Sıra boyunca irəliləyirik və son dolu yerin indeksini yadda saxlayırıq.
- Hər dolu yer üçün, əvvəlki ilə arasındakı məsafəni hesablayırıq və yarısını götürürük (ən uzaq yer arasında).
- Həmçinin, sıra başından ilk dolu yerə və son dolu yerə qədər olan məsafələri nəzərə alırıq.
- Bu məsafələrin ən böyüyünü qaytarırıq.