Sobes.tech
Middle

/* Sinema koltukları tek bir sırada dizilidir. Yeni gelen izleyici, diğer izleyicilerden mümkün olan en uzak mesafeye oturmak için bir koltuk seçer. Yani, oturacağı koltuktan en yakın izleyiciye olan mesafe maksimum olmalıdır. Her zaman boş koltuklar olduğu ve en az bir izleyicinin oturduğu garanti edilir. Verilen bir sıra koltuk (sıfırlar ve birlerden oluşan bir dizi) için, seçilen koltuktan uzaklığı döndüren bir fonksiyon yazın. Girdi: [1, 0, 0, 0, 0, 1] Çıktı: 2 Girdi: [1, 0, 1, 0, 0, 1, 0, 0, 0, 1] Çıktı: 2 Girdi: [1, 0, 1, 0] Çıktı: 1 */

sobes.tech yapay zeka

AI'dan gelen yanıt

Fonksiyon, en yakın dolu yer (birler) ile olan mesafenin maksimum olduğu yerin (sıfır indeksli) konumunu bulmalıdır.

Çözüm fikri:

  • Diziyi dolaşın, her boş yer için en yakın dolu yere olan mesafeyi hesaplayın.
  • Bu maksimum mesafeyi döndürün.

Optimum yöntem, soldaki ve sağdaki en yakın birlere olan mesafelerin sayımıyla tek geçiştir.

Go dilinde örnek:

func maxDistance(koltuklar []int) int {
    n := len(koltuklar)
    solDist := make([]int, n)
    sagDist := make([]int, n)

    // En yakın dolu yerin solundaki mesafeleri doldurun
    dist := n
    for i := 0; i < n; i++ {
        if koltuklar[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        solDist[i] = dist
    }

    // En yakın dolu yerin sağındaki mesafeleri doldurun
    dist = n
    for i := n - 1; i >= 0; i-- {
        if koltuklar[i] == 1 {
            dist = 0
        } else {
            dist++
        }
        sagDist[i] = dist
    }

    maxDist := 0
    for i := 0; i < n; i++ {
        if koltuklar[i] == 0 {
            // En yakın izleyiciye olan minimum mesafe
            d := solDist[i]
            if sagDist[i] < d {
                d = sagDist[i]
            }
            if d > maxDist {
                maxDist = d
            }
        }
    }

    return maxDist
}

Bu şekilde, fonksiyon seçilen yer için en yakın izleyiciye olan maksimum mesafeyi döndürür.