Sobes.tech
Back to questions
Intern
4

""" Места в кинотеатре расположены в один ряд. Только что пришедший зритель выбирает место, чтобы сидеть максимально далеко от остальных зрителей в ряду. То есть расстояние от того места, куда сядет зритель до ближайшего к нему зрителя должно быть максимально. Гарантируется, что в ряду всегда есть свободные места и уже сидит хотя бы один зритель. Напишите функцию, которая по заданному ряду мест (массиву из нулей и единиц) вернёт расстояние (число промежутков между креслами) от выбранного места до ближайшего зрителя. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """ func maxPlaces(arr []int) int { }

Companies where asked
Яндекс

Answer from AI

sobes.tech AI

Для решения задачи нужно найти такое свободное место (0), у которого минимальное расстояние до ближайшего занятого места (1) максимально.

Алгоритм:

  1. Пройти по массиву и запомнить индексы занятых мест.
  2. Для каждого свободного места вычислить расстояние до ближайшего занятого места.
  3. Вернуть максимальное из таких расстояний.

Пример реализации на Go:

func maxPlaces(arr []int) int {
	occupied := []int{}
	for i, v := range arr {
		if v == 1 {
			occupied = append(occupied, i)
		}
	}

	maxDist := 0
	for i, v := range arr {
		if v == 0 {
			// Найти минимальное расстояние до любого занятого места
			minDist := len(arr)
			for _, occ := range occupied {
				d := i - occ
				if d < 0 {
					d = -d
				}
				if d < minDist {
					minDist = d
				}
			}
			if minDist > maxDist {
				maxDist = minDist
			}
		}
	}
	return maxDist
}

Пример:

fmt.Println(maxPlaces([]int{1, 0, 0, 0, 1})) // 2
fmt.Println(maxPlaces([]int{1, 0, 1, 0, 0, 1, 0, 0, 0, 1})) // 2
fmt.Println(maxPlaces([]int{1, 0, 1, 0})) // 1