Skip to content

Commit 42e889c

Browse files
committed
refactor: Optimize space usage in productExceptSelf solution
- Reuse output array for prefix cumulative product computation - Utilize a single variable for suffix cumulative product to update output array in-place - Achieve O(n) time and O(1) extra space complexity
1 parent c7d07ec commit 42e889c

File tree

1 file changed

+9
-16
lines changed

1 file changed

+9
-16
lines changed

โ€Žproduct-of-array-except-self/river20s.pyโ€Ž

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,19 @@ class Solution(object):
22
def productExceptSelf(self, nums):
33
"""
44
TimeComplexity: O(n)
5-
SpaceComplexity: O(n)
5+
SpaceComplexity: O(1)
66
"""
77
n = len(nums)
8+
answer = [1] * n # ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ
89

9-
10-
# prefix product ์ˆ˜ํ–‰
11-
# left๋Š” i๋ฒˆ์งธ ์š”์†Œ ์™ผ์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋“ค์˜ ๊ณฑ
12-
left = [1] * n
10+
# i๋ฒˆ์งธ ์š”์†Œ ์™ผ์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋“ค์— ๋Œ€ํ•ด prefix product ์ˆ˜ํ–‰
1311
for i in range(1, n):
14-
left[i] = left[i - 1] * nums[i - 1]
15-
16-
# suffix product ์ˆ˜ํ–‰
17-
# right๋Š” i๋ฒˆ์งธ ์š”์†Œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋“ค์˜ ๊ณฑ
18-
right = [1] * n
19-
for i in range(n - 2, -1, -1): # ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค, [n - 1]์€ ์ด๋ฏธ 1๋กœ ์ดˆ๊ธฐํ™” ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ
20-
right[i] = right[i + 1] * nums[i + 1]
12+
answer[i] = answer[i - 1] * nums[i - 1]
2113

22-
# ๋‘ ๋ฐฐ์—ด์„ ์ด์šฉํ•˜์—ฌ ์ตœ์ข… ์ถœ๋ ฅ
23-
answer = [1] * n
24-
for i in range(n):
25-
answer[i] = left[i] * right[i]
14+
# ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์š”์†Œ๋“ค์— ๋Œ€ํ•ด suffix product ์ˆ˜ํ–‰
15+
right = 1 # ์˜ค๋ฅธ์ชฝ ๋ˆ„์  ๊ณฑ
16+
for i in range(n - 1, -1, -1):
17+
answer[i] *= right # ํ˜„์žฌ ์ธ๋ฑ์Šค ์™ผ์ชฝ ๊ณฑ๊ณผ ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ๊ณฑํ•จ
18+
right *= nums[i] #์˜ค๋ฅธ์ชฝ ๋ˆ„์  ๊ณฑ ์—…๋ฐ์ดํŠธ
2619

2720
return answer

0 commit comments

Comments
ย (0)