Skip to content

Commit 2e6b9e1

Browse files
committed
solve(w02): 238. Product of Array Except Self
1 parent f02818b commit 2e6b9e1

File tree

1 file changed

+55
-0
lines changed

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# https://leetcode.com/problems/product-of-array-except-self/
2+
3+
from typing import List
4+
5+
class Solution:
6+
def productExceptSelf1(self, nums: List[int]) -> List[int]:
7+
"""
8+
[Complexity]
9+
- TC: O(n)
10+
- SC: O(n)
11+
12+
[Approach]
13+
division operation ์—†์ด ๊ฐ ์›์†Œ๋งˆ๋‹ค ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฐ’์˜ ๊ณฑ์„ ๊ตฌํ•ด์•ผํ•˜๋ฏ€๋กœ, ๋‹ค์Œ์˜ ์ˆœ์„œ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
14+
1) ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์›์†Œ๋ณด๋‹ค ์™ผ์ชฝ์— ์žˆ๋Š” ๊ฐ’๋“ค์˜ ๊ณฑ์œผ๋กœ left ๋ฐฐ์—ด ์ฑ„์šฐ๊ธฐ
15+
2) ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ์›์†Œ๋ณด๋‹ค ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฐ’๋“ค์˜ ๊ณฑ์œผ๋กœ right ๋ฐฐ์—ด ์ฑ„์šฐ๊ธฐ
16+
3) left์™€ right ๋ฐฐ์—ด์˜ ์›์†Œ๋งˆ๋‹ค ๊ณฑ์„ ๊ตฌํ•ด์„œ ๊ฒฐ๊ณผ ๋ฐฐ์—ด ๋ฐ˜ํ™˜ํ•˜๊ธฐ
17+
"""
18+
n = len(nums)
19+
20+
left = [1] * n
21+
for i in range(1, n):
22+
left[i] = left[i - 1] * nums[i - 1]
23+
24+
right = [1] * n
25+
for i in range(n - 2, -1, -1):
26+
right[i] = right[i + 1] * nums[i + 1]
27+
28+
return [l * r for l, r in zip(left, right)]
29+
30+
def productExceptSelf(self, nums: List[int]) -> List[int]:
31+
"""
32+
[Complexity]
33+
- TC: O(n)
34+
- SC: O(n) (O(1) extra space)
35+
36+
[Approach]
37+
follow up ์กฐ๊ฑด์„ ์œ„ํ•ด์„œ๋Š” ์ฒซ ๋ฒˆ์งธ ํ’€์ด์ฒ˜๋Ÿผ left, right ๋ฐฐ์—ด์„ ๋‘๋ฉด ์•ˆ ๋˜๊ณ , res ๋ฐฐ์—ด์—์„œ ๊ฐ’์„ ์—…๋ฐ์ดํŠธ ํ•ด๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค.
38+
์ด๋•Œ, O(1) space๋ฅผ ์œ„ํ•ด์„œ ๋ณ€์ˆ˜ prev๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ, ์ˆœํšŒ ์ง„ํ–‰ ๋ฐฉํ–ฅ ๊ธฐ์ค€ ์ด์ „ ๊ฐ’๋“ค์˜ ๊ณฑ์„ ํŠธ๋ž˜ํ‚นํ•ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.
39+
1) nums๋ฅผ ์™ผ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ res ๋ฐ prev ๊ฐ’ ์—…๋ฐ์ดํŠธ
40+
2) nums๋ฅผ ์˜ค๋ฅธ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•˜๋ฉด์„œ res ๋ฐ prev ๊ฐ’ ์—…๋ฐ์ดํŠธ
41+
"""
42+
n = len(nums)
43+
res = []
44+
45+
prev = 1
46+
for i in range(n):
47+
res.append(prev)
48+
prev *= nums[i]
49+
50+
prev = 1
51+
for i in range(n - 1, -1, -1):
52+
res[i] *= prev
53+
prev *= nums[i]
54+
55+
return res

0 commit comments

Comments
ย (0)