Sobes.tech
Intern

""" Locurile din cinematograf sunt aranjate într-un rând. Un spectator care tocmai a sosit alege un loc, pentru a sta cât mai departe de ceilalți spectatori din rând. Adică, distanța de la acel loc, până la cel mai apropiat spectator, trebuie să fie maximă. Se garantează că există întotdeauna locuri libere și că cel puțin un spectator este deja așezat. Scrieți o funcție care, dat fiind un rând de locuri (un array de zerouri și unu), va returna distanța (numărul de spații între scaune) de la locul ales până la cel mai apropiat spectator. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech AI

Răspuns de la 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 }


Объяснение:
- Идём по ряду, запоминая индекс последнего занятого места.
- Для каждого занятого места считаем расстояние до предыдущего и берём половину (максимально удалённое место между ними).
- Также учитываем расстояния от начала ряда до первого занятого места и от последнего занятого места до конца ряда.
- Возвращаем максимальное из этих расстояний.