Sobes.tech
Intern

""" კინოთერის ადგილები ერთ რიგშია განლაგებული. ახალი მოსული მაყურებელი არჩევს ადგილს, მოსახერხებლად მაქსიმალურად მოშორებით სხვა მაყურებლებს, რიგში. ანუ, ადგილიდან, სადაც ის დაჯდება, ყველაზე ახლოს მყოფ მაყურებელთან მანძილი უნდა იყოს მაქსიმალური. გაიგება, რომ ყოველთვის არსებობს თავისუფალი ადგილები და უკვე დაჯდა მინიმუმ ერთი მაყურებელი. დაწერეთ ფუნქცია, რომელიც მოცემული ადგილების რიგიდან (ნოლებისა და ერთების მასივი) დააბრუნებს მანძილს (სკამებს შორის სვლების რაოდენობას) ადგილიდან ყველაზე ახლოს მყოფ მაყურებელამდე. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech AI

პასუხი AI-სგან

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 {
			// რიგის დასაწყისიდან პირველი დაკავებული ადგილი
			maxDist = i
		} else {
			// ორი დაკავებული ადგილი შორის მანძილი
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// ბოლო დაკავებული ადგილისგან რიგის ბოლომდე მანძილი
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 }


განმარტება:
- ჩვენ ვატარებთ რიგს და ვიხსენებთ ბოლო დაკავებული ადგილის ინდექსს.
- თითოეულ დაკავებულ ადგილზე ვთვლით მანძილს წინა ადგილთან და ვიღებთ ნახევარს (ყველაზე მოშორებული ადგილი მათ შორის).
- ასევე ვთვლით მანძილებს რიგის დასაწყისიდან პირველ დაკავებულ ადგილზე და ბოლო დაკავებულიდან რიგის ბოლომდე.
- ვაბრუნებთ ამ მანძილთა შორის ყველაზე დიდს.