Leetcode 238 Product of Array Except Self

Soru

Given an integer array nums, return an array answer such that answer[i] is equal to the product of all the elements of nums except nums[i].

The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer.

You must write an algorithm that runs in O(n) time and without using the division operation.

Follow up: Can you solve the problem in O(1) extra space complexity? (The output array does not count as extra space for space complexity analysis.)

Örnek 1

Input: nums = [1,2,3,4]
Output: [24,12,8,6]

Örnek 2

Input: nums = [-1,1,0,-3,3]
Output: [0,0,9,0,0]

Çözüm

  • Verilen bir dizideki tüm elemanların kendisi hariç diğer tüm elemanların çarpımını hesaplamanızı gerektiren bir problem. Sorunun kilit noktası, bölme işlemi kullanmadan ve O(n) zaman karmaşıklığında çözüm üretmek.:D
  • Çözüm, genellikle iki geçişli bir yaklaşım kullanarak hesaplanabilir:
  • İlk Geçiş (Soldan Sağa): Bu adımda, her eleman için solundaki tüm elemanların çarpımını hesaplayıp bir sonuç dizisine kaydedersiniz.
  • İkinci Geçiş (Sağdan Sola): Bu adımda, her eleman için sağında kalan tüm elemanların çarpımını hesaplayıp, bu değeri ilk geçişten elde edilen sonuçla çarparak güncellersiniz.

Code

    def productExceptSelf(self, nums: List[int]) -> List[int]:
        n = len(nums)
        answer = [1] * n
    # İlk geçiş: Her bir eleman için, solundaki tüm elemanların çarpımını hesapla
        left_product = 1
        for i in range(n):
            answer[i] = left_product
            left_product *= nums[i]
    # İkinci geçiş: Her bir eleman için, sağ tarafındaki tüm elemanların çarpımını hesapla
        right_product = 1
        for i in range(n - 1, -1, -1):
            answer[i] *= right_product
            right_product *= nums[i]
                    
        return answer

Complexity

  • Time complexity (Zaman Karmaşıklığı): Her bir eleman iki kez ziyaret edilir: bir kez soldan sağa ve bir kez sağdan sola. Bu nedenle, çözümün zaman karmaşıklığı O(n)‘dir, burada n dizinin boyutudur.
  • Space complexity (Alan Karmaşıklığı): Çözümde, girdi dizisinden başka yalnızca sonuç dizisi için yer ayrılır. Bu yüzden, alan karmaşıklığı O(n) olarak değerlendirilir.