Skip to content

Commit 1c8b007

Browse files
committed
solution(add): product-of-array-except-self
1 parent 2c8f407 commit 1c8b007

File tree

1 file changed

+25
-6
lines changed

1 file changed

+25
-6
lines changed

product-of-array-except-self/wozlsla.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,51 @@
1515
1616
# Complexity
1717
- Time complexity : O(N)
18-
- Space complexity : O(N)
18+
- Space complexity : O(N) / O(1)
1919
"""
2020

2121
from typing import List
2222

2323

24+
class Solution:
25+
def productExceptSelf(self, nums: List[int]) -> List[int]:
26+
27+
n = len(nums)
28+
res = [1] * n
29+
30+
prefix_product = 1
31+
for i in range(n):
32+
res[i] = prefix_product
33+
prefix_product *= nums[i]
34+
35+
suffix_product = 1
36+
for i in range(n - 1, -1, -1):
37+
res[i] *= suffix_product
38+
suffix_product *= nums[i]
39+
40+
41+
"""
2442
class Solution:
2543
def productExceptSelf(self, nums: List[int]) -> List[int]:
2644
2745
# 중복 계산을 피하는 방법?
28-
res_1 = [1] * len(nums) # [1, 1, 1, 1]
29-
res_2 = [1] * len(nums) # [1, 1, 1, 1]
46+
res_1 = [1] * len(nums)
47+
res_2 = [1] * len(nums)
3048
3149
for n in range(1, len(nums)): # [1, 1(a), 2(ab), 6(abc)]
3250
res_1[n] = res_1[n - 1] * nums[n - 1]
3351
34-
nums.reverse() # [4, 3, 2, 1]
35-
for n in range(1, len(nums)): # [1, 4(d), 12(cd), 24(bcd)]
36-
res_2[n] = res_2[n - 1] * nums[n - 1]
52+
# reverse X -> range를 반대로
53+
for n in range(len(nums) - 1, -1, -1): # [1, 4(d), 12(cd), 24(bcd)]
54+
res_2[n] = res_2[n + 1] * nums[n + 1]
3755
3856
res_2.reverse()
3957
return [res_1[i] * res_2[i] for i in range(len(nums))]
4058
4159
4260
sol = Solution()
4361
print(sol.productExceptSelf([1, 2, 3, 4]))
62+
"""
4463

4564

4665
"""

0 commit comments

Comments
 (0)