Takip et

LeetCode 238: Kendi Dışındaki Çarpım – JavaScript Çözümü

LeetCode 238: Kendi Dışındaki Çarpım – JavaScript Çözümü

Bu yazıda, LeetCode’un oldukça popüler problemlerinden biri olan “Kendi Dışındaki Çarpım” (Product of Array Except Self) problemini JavaScript kullanarak nasıl çözebileceğimize bakacağız. Problem kısaca, verilen bir dizide her bir elemanın, kendisini hariç tutan diğer tüm elemanların çarpımını içeren yeni bir dizi oluşturmayı gerektiriyor.

Örneğin, [1,2,3,4] dizisi için çıktı [24,12,8,6] olmalıdır. Çünkü 24 = 2*3*4, 12 = 1*3*4, 8 = 1*2*4 ve 6 = 1*2*3’tür.

Çözüm Yöntemleri

Bu problemi çözmek için birkaç farklı yaklaşım mevcuttur. En yaygın ve verimli olanlarından ikisini inceleyelim:

1. İki Geçitli (Two Pass) Yöntem

Bu yöntemde, öncelikle her elemanın sağındaki elemanların çarpımını hesaplayan bir dizi oluşturuyoruz. Ardından, ikinci bir geçişte, her elemanın solundaki elemanların çarpımını hesaplayıp, bu iki diziyi birleştiriyoruz. Bu yöntem, her elemanın hesaplanması için sadece iki geçiş gerektirir ve oldukça verimlidir.


/**
 * @param {number[]} nums
 * @return {number[]}
 */
var productExceptSelf = function(nums) {
    const n = nums.length;
    const result = new Array(n).fill(1); // Sonuç dizisini 1'lerle başlatıyoruz

    // Sağdaki çarpımları hesapla
    let rightProduct = 1;
    for (let i = n - 1; i >= 0; i--) {
        result[i] *= rightProduct;
        rightProduct *= nums[i];
    }

    // Soldaki çarpımları hesapla ve sonuç dizisini güncelle
    let leftProduct = 1;
    for (let i = 0; i < n; i++) {
        result[i] *= leftProduct;
        leftProduct *= nums[i];
    }

    return result;
};

2. Tek Geçitli (One Pass) Yöntem (Daha karmaşık ancak daha az bellek kullanır)

Bu yöntem, daha az ek bellek kullanır, fakat kodun anlaşılırlığı azalabilir. Bu yöntemde, aynı anda hem sağ hem de sol çarpımları hesaplayarak tek bir geçişte sonucu elde ederiz.

Ancak, bu yöntemin uygulanması daha karmaşıktır ve hata yapma olasılığı daha yüksektir. Bu yüzden, özellikle performans çok kritik olmadığı sürece, iki geçişli yöntemi tercih etmek daha iyi olabilir.

Performans Karşılaştırması

İki yöntemin de zaman karmaşıklığı O(n) iken, iki geçişli yöntem daha anlaşılır ve debug'laması daha kolaydır. Bellek kullanımı açısından, tek geçişli yöntem daha az bellek tüketir.

Sonuç olarak, problemi çözmek için en uygun yöntem, projenin özel gereksinimlerine ve önceliklerine bağlı olarak değişir.

Sonuç

Bu yazıda, LeetCode'un "Kendi Dışındaki Çarpım" problemini çözmek için iki farklı JavaScript çözümü inceledik. Her iki çözümün de avantajları ve dezavantajları vardır. Doğru çözümü seçerken, kodun okunabilirliği, performans gereksinimleri ve bellek kullanımı gibi faktörleri göz önünde bulundurmak önemlidir. Daha fazla LeetCode çözümü ve JavaScript ile ilgili içerikler için fatihsoysal.com sitesini ziyaret edebilirsiniz.

Umarım bu makale size yardımcı olmuştur! Başka sorularınız varsa veya konuyla ilgili daha fazla bilgi edinmek istiyorsanız, lütfen yorumlarda belirtin.

Faydalı bulabileceğiniz kaynaklar:

#Etiketler: LeetCode, JavaScript, Algoritma, Dizi, Çarpım, Kendi Dışındaki Çarpım, İki Geçitli Yöntem, Tek Geçitli Yöntem, Performans, Kod, Programlama, Tutorial


Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.