Sobes.tech
Intern
56

""" Кинотеатрдағы орындар қатармен орналасқан. Жаңа келген көрермен орын таңдайды, ол басқа көрермендерден мүмкіндігінше алыс болсын. Яғни, таңдалған орын мен ең жақын көрермен арасындағы қашықтық максималды болуы керек. Кез келген уақытта бос орындар бар және кемінде бір көрермен отырғызылғанына кепілдік беріледі. Функцияны жазыңыз, ол орындар қатарын (нөлдер мен бірліктердің массиві) қабылдап, таңдалған орын мен ең жақын көрермен арасындағы қашықтықты (орындар арасындағы аралықтар саны) қайтарады. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

Сұралған компаниялар
Яндекс

AI-дан жауап

sobes.tech 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 }


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