Middle
/* Miejsca w kinie są ustawione w jednym rzędzie. Właśnie przybyły widz wybiera miejsce, aby siedzieć jak najdalej od innych widzów w rzędzie. To znaczy, odległość od tego miejsca, na które usiądzie, 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ść od wybranego miejsca. Input: [1, 0, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Output: 2 Input: [1, 0, 1, 0] Output: 1 */
sobes.tech AI
Odpowiedź od AI
Funkcja powinna znaleźć miejsce (indeks z zerem), w którym odległość do najbliższego zajętego miejsca (jedynki) jest maksymalna.
Pomysł rozwiązania:
- Przejdź przez tablicę, dla każdego wolnego miejsca oblicz odległość do najbliższego zajętego.
- Zwróć tę maksymalną odległość.
Optymalny sposób to jedno przejście z liczeniem odległości do najbliższych jedynek po lewej i prawej stronie.
Przykład w Go:
func maxDistance(siedzenia []int) int {
n := len(siedzenia)
odlegloscL := make([]int, n)
odlegloscP := make([]int, n)
// Wypełniamy odległości do najbliższego zajętego miejsca po lewej stronie
dist := n
for i := 0; i < n; i++ {
if siedzenia[i] == 1 {
dist = 0
} else {
dist++
}
odlegloscL[i] = dist
}
// Wypełniamy odległości do najbliższego zajętego miejsca po prawej stronie
dist = n
for i := n - 1; i >= 0; i-- {
if siedzenia[i] == 1 {
dist = 0
} else {
dist++
}
odlegloscP[i] = dist
}
maxDist := 0
for i := 0; i < n; i++ {
if siedzenia[i] == 0 {
// Minimalna odległość do najbliższego widza
d := odlegloscL[i]
if odlegloscP[i] < d {
d = odlegloscP[i]
}
if d > maxDist {
maxDist = d
}
}
}
return maxDist
}
W ten sposób funkcja zwróci maksymalną odległość do najbliższego widza dla wybranego miejsca.