Middle
/* კინოში ადგილები განლაგებულია ერთ რიგში. ახალი მაყურებელი არჩევს ადგილს, რათა მაქსიმალურად მოშორებით იჯდეს სხვა მაყურებლებისგან. მაშინ, ადგილისგან, სადაც ის დაჯდება, ყველაზე ახლოს მყოფ მაყურებელამდე მანძილი მაქსიმალური უნდა იყოს. გაიგება, რომ ყოველთვის თავისუფალი ადგილები არსებობს და უკვე იჯდა მინიმუმ ერთი მაყურებელი. დაწერეთ ფუნქცია, რომელიც მოცემული ადგილების რიგის (ნულებისა და ერთების მასივი) საფუძველზე დააბრუნებს არჩეულ ადგილთან მანძილს. შესავალი: [1, 0, 0, 0, 0, 1] გამავალი: 2 შესავალი: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] გამავალი: 2 შესავალი: [1, 0, 1, 0] გამავალი: 1 */
sobes.tech AI
პასუხი AI-სგან
ფუნქციამ უნდა იპოვოს ადგილი (ნულით აღნიშნული ინდექსი), სადაც ყველაზე დიდი მანძილია ყველაზე ახლოს დაკავებული ადგილის (ერთი)გან.
შესაძლებელი გადაწყვეტა:
- გაიარეთ მასივი, თითო თავისუფალ ადგილისთვის გამოთვალეთ მანძილი ყველაზე ახლოს დაკავებულ ადგილამდე.
- დააბრუნეთ ეს მაქსიმალური მანძილი.
ოპტიმალური მეთოდი — ერთი გადაცემა, სადაც ითვლება მანძილები მარჯვნივ და მარცხნივ ყველაზე ახლოს მდებარე ერთებისათვის.
მაგალითი Go-ში:
func maxDistance(seats []int) int {
n := len(seats)
leftDist := make([]int, n)
rightDist := make([]int, n)
// შევსება მანძილებით ყველაზე ახლოს დაკავებული ადგილის მარცხნივ
dist := n
for i := 0; i < n; i++ {
if seats[i] == 1 {
dist = 0
} else {
dist++
}
leftDist[i] = dist
}
// შევსება მანძილებით ყველაზე ახლოს დაკავებული ადგილის მარჯვნივ
dist = n
for i := n - 1; i >= 0; i-- {
if seats[i] == 1 {
dist = 0
} else {
dist++
}
rightDist[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if seats[i] == 0 {
// მინიმალური მანძილი ყველაზე ახლოს მაყურებელთან
d := leftDist[i]
if rightDist[i] < d {
d = rightDist[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
ამ გზით, ფუნქცია დააბრუნებს მაქსიმალურ მანძილს ყველაზე ახლოს მყოფ მაყურებელთან არჩევანზე.