Sobes.tech
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.