1
1
"""
2
2
Constraints:
3
- 1. 2 <= nums.length <= 10^5
4
- 2. -30 <= nums[i] <= 30
5
- 3. The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer
3
+ - ๋๋์
์ฐ์ฐ ์ฌ์ฉ ๋ถ๊ฐ๋ฅ
4
+ - O(n) ์๊ฐ ๋ณต์ก๋๋ก ๊ตฌํํด์ผ ํจ
5
+ - ๋ชจ๋ prefix/ suffix ๊ณฑ์ 32๋นํธ ์ ์ ๋ฒ์ ๋ด์ ์์
6
6
7
7
Time Complexity: O(n)
8
- - ๋ฐฐ์ด์ ๋ ๋ฒ ์ํํ๋ฏ๋ก O(n)
8
+ - ๋ฐฐ์ด์ ๋ ๋ฒ๋ง ์ํ
9
9
10
10
Space Complexity: O(1)
11
- - ์ถ๋ ฅ ๋ฐฐ์ด(answer)์ ์ ์ธํ๋ฉด ์ถ๊ฐ ๊ณต๊ฐ์ด ์์๋งํผ๋ง ํ์ (left, right ๋ณ์)
11
+ - ์ถ๋ ฅ ๋ฐฐ์ด ์ธ ์ถ๊ฐ ๊ณต๊ฐ์ ์์๋ง ์ฌ์ฉ (left, right ๋ณ์)
12
12
13
13
ํ์ด ๋ฐฉ๋ฒ:
14
- 1. answer ๋ฐฐ์ด์ 1๋ก ์ด๊ธฐํ (๊ณฑ์
์์๋ 1์ด ์ํฅ์ ์ฃผ์ง ์์)
15
- 2. ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ํ:
16
- - answer[i]์ ํ์ฌ๊น์ง์ left ๋์ ๊ฐ์ ๊ณฑํจ
17
- - left *= nums[i]๋ก ๋ค์์ ์ํด left ๊ฐ์ ์
๋ฐ์ดํธ
18
- 3. ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ํ (range(n-1, -1, -1) ์ฌ์ฉ):
19
- - answer[i]์ ํ์ฌ๊น์ง์ right ๋์ ๊ฐ์ ๊ณฑํจ
20
- - right *= nums[i]๋ก ๋ค์์ ์ํด right ๊ฐ์ ์
๋ฐ์ดํธ
14
+ - ๊ฐ ์์น์ ๊ฒฐ๊ณผ๋ (์ผ์ชฝ ๋ชจ๋ ์์์ ๊ณฑ) * (์ค๋ฅธ์ชฝ ๋ชจ๋ ์์์ ๊ณฑ)
15
+ - ๋ ๋ฒ์ ์ํ๋ก ์ด๋ฅผ ๊ณ์ฐ:
16
+ 1. ์ผ์ชฝ -> ์ค๋ฅธ์ชฝ: ๊ฐ ์์น์ ์ผ์ชฝ ๋ชจ๋ ์์์ ๋์ ๊ณฑ ์ ์ฅ
17
+ 2. ์ค๋ฅธ์ชฝ -> ์ผ์ชฝ: ๊ฐ ์์น์ ์ค๋ฅธ์ชฝ ๋ชจ๋ ์์์ ๋์ ๊ณฑ์ ๊ณฑํจ
18
+
19
+ ์์: nums = [1, 2, 3, 4]
20
+ 1๋จ๊ณ ํ: answer = [1, 1, 2, 6]
21
+ 2๋จ๊ณ ํ: answer = [24, 12, 8, 6]
21
22
"""
22
23
24
+ # Final result = (product of all elements on the left side) * (product of all elements on the right side)
25
+
26
+ # Step 1: Initialize result array with 1s
27
+ # Step 2: Traverse from left to right, storing cumulative product of left side
28
+ # Step 3: Traverse from right to left, multiplying with cumulative product of right side
29
+ # nums = [1,2,3,4]
23
30
class Solution :
24
31
def productExceptSelf (self , nums : List [int ]) -> List [int ]:
25
32
n = len (nums )
@@ -29,10 +36,11 @@ def productExceptSelf(self, nums: List[int]) -> List[int]:
29
36
for i in range (n ):
30
37
answer [i ] *= left
31
38
left *= nums [i ]
32
-
39
+ # answer = [1, 1, 2, 6] at this point
33
40
right = 1
34
41
for i in range (n - 1 , - 1 , - 1 ):
35
42
answer [i ] *= right
36
43
right *= nums [i ]
37
-
44
+
38
45
return answer
46
+ # answer = [24,12,8,6]
0 commit comments