Product of Array Except Self: bölme kullanmadan, her indeks için diğer tüm elemanların çarpımını O(n) zamanda hesaplayın.

Cevap

Her indeks için cevap = solundaki elemanların çarpımı x sağındaki elemanların çarpımı. Önce soldan prefix çarpımlarını, sonra sağdan suffix çarpımlarını tek bir çıktı dizisinde biriktiririz.

Neden bölme yok?

Toplam çarpımı alıp nums[i]'ye bölmek ilk akla gelendir ama dizide 0 varsa çöker; mülakatçı da bölmeyi açıkça yasaklar.

def product_except_self(nums):
    n = len(nums)
    res = [1] * n

    prefix = 1
    for i in range(n):          # res[i] = sol taraftaki çarpım
        res[i] = prefix
        prefix *= nums[i]

    suffix = 1
    for i in range(n - 1, -1, -1):  # sağ taraftaki çarpımla çarp
        res[i] *= suffix
        suffix *= nums[i]
    return res

print(product_except_self([1, 2, 3, 4]))  # [24, 12, 8, 6]

Adım adım [1,2,3,4]

iprefix (sol)suffix (sağ)sonuç
012424
111212
2248
3616

Karmaşıklık

  • Zaman: O(n) (iki geçiş).
  • Ek bellek: çıktı dizisi sayılmazsa O(1).
  1. Binary search'ün zaman karmaşıklığı nedir ve neden?KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  2. Two Sum: toplamı hedefe eşit olan iki elemanın indekslerini bulun.KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  3. Bir parantez dizisinin geçerli olup olmadığını kontrol edin: "({[]})"KolayAlgoritmalar & Veri YapılarıYazılım Müh.
  4. Tek yönlü bağlı listeyi ters çevirin.OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  5. BFS ve DFS arasındaki fark nedir? Hangisini ne zaman kullanırsınız?OrtaAlgoritmalar & Veri YapılarıYazılım Müh.
  6. get ve put işlemleri O(1) olan bir LRU Cache tasarlayın.ZorAlgoritmalar & Veri YapılarıYazılım Müh.

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle