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.