Sobes.tech
Intern

""" Miejsca w kinie są ustawione w jednym rzędzie. Nowo przybyły widz wybiera miejsce, aby siedzieć jak najdalej od innych widzów w rzędzie. To znaczy, odległość od tego miejsca do najbliższego widza powinna być maksymalna. Gwarantuje się, że zawsze są wolne miejsca i że już siedzi co najmniej jeden widz. Napisz funkcję, która na podstawie podanego rzędu miejsc (tablicy zer i jedynek) zwróci odległość (liczbę przerw między fotelami) od wybranego miejsca do najbliższego widza. [1, 0, 0, 0, 1] -> 2 [1, 0, 1, 0, 0, 1, 0, 0, 1] -> 2 [1, 0, 1, 0] -> 1 """

sobes.tech AI

Odpowiedź od 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 {
			// odległość od początku rzędu do pierwszego zajętego miejsca
			maxDist = i
		} else {
			// odległość między dwoma zajętymi miejscami
			midDist := (i - lastOccupied) / 2
			if midDist > maxDist {
				maxDist = midDist
			}
		}
		lastOccupied = i
	}
}
// odległość od ostatniego zajętego miejsca do końca rzędu
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 }


Wyjaśnienie:
- Przechodzimy przez rząd, pamiętając indeks ostatniego zajętego miejsca.
- Dla każdego zajętego miejsca obliczamy odległość do poprzedniego i bierzemy połowę (najdalsze miejsce między nimi).
- Uwzględniamy także odległości od początku rzędu do pierwszego zajętego miejsca i od ostatniego zajętego miejsca do końca rzędu.
- Zwracamy największą z tych odległości.