Skip to content

Commit 932fa8e

Browse files
committed
DaleStudy#270 maximum-product-subarray solution
1 parent 5e5a8e7 commit 932fa8e

File tree

2 files changed

+55
-20
lines changed

2 files changed

+55
-20
lines changed
+32-20
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
11
"""
2-
/ํ’€์ด ๋ด๋„ ์ž˜ ์ดํ•ด ๋ชปํ•ด์„œ ์ถ”๊ฐ€ ์ฝ”๋ฉ˜ํŠธ/
3-
nums[i]๊ฐ€ ๊ทธ ์ „๊นŒ์ง€ subarray์˜ ํ•ฉ total๋ณด๋‹ค ์ž‘์€ ์Œ์ˆ˜์ธ ์ผ€์ด์Šค๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฑฐ์ง€ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ
4-
ex) total : -1, nums[i] = -2
5-
์–ด์ฐจํ”ผ -1์ธ ์‹œ์ ์— maxTotal์ด ์—…๋ฐ์ดํŠธ ๋์œผ๋ฏ€๋กœ total์€ nums[i]๋ถ€ํ„ฐ ๋”ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ -2๋กœ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์Œ
6-
๋”ฐ๋ผ์„œ ์ด์ „๊นŒ์ง€ subarray์˜ ํ•ฉ๋งŒ ์Œ์ˆ˜ ์–‘์ˆ˜ ์ฒดํฌ
7-
8-
TC : for๋ฌธ ํ•œ๋ฒˆ
9-
=> O(N)
10-
SC : ์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ์“ฐ์ง€ ์•Š์œผ๋ฏ€๋กœ
11-
=> O(1)
2+
** ์‹ค์ˆ˜๋กœ ์˜ˆ์ „ ๊ณผ์ œ ์ˆ˜ํ–‰ ๋•Œ ๋‹ค๋ฅธ ๊ณผ์ œํด๋”์— ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ํŒŒ์ผ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค!!
3+
4+
ํ’€์ด :
5+
nums์˜ ๊ตฌ์„ฑ์š”์†Œ num์— ๋”ฐ๋ผ ๊ฐ๊ฐ ํ›„๋ณด1, ํ›„๋ณด2, ํ›„๋ณด3 ์ค‘์—
6+
๊ฐ€์žฅ ํฐ ๊ฐ’์€ ์ƒˆ๋กœ์šด max_res, ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์€ ์ƒˆ๋กœ์šด min_res
7+
8+
ํ›„๋ณด1: ์ด์ „ max_res * ํ˜„์žฌ num (num์ด ์–‘์ˆ˜์ผ ๊ฒฝ์šฐ ๊ฐ€์žฅ ํด ๊ฐ€๋Šฅ์„ฑ)
9+
ํ›„๋ณด2: ์ด์ „ min_res * ํ˜„์žฌ num (num์ด ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ๊ฐ€์žฅ ํด ๊ฐ€๋Šฅ์„ฑ)
10+
ํ›„๋ณด3: ํ˜„์žฌ num (num์ด ์–‘์ˆ˜์ผ ๊ฒฝ์šฐ ๊ฐ€์žฅ ํด ๊ฐ€๋Šฅ์„ฑ)
11+
12+
์ƒˆ๋กœ์šด max_res์™€ max_total์„ ๋น„๊ตํ•ด์„œ ์—…๋ฐ์ดํŠธ
13+
14+
15+
๋ฉ”๋ชจ :
16+
- ํ˜„์žฌ num์ด 0์ผ ๊ฒฝ์šฐ ํ›„๋ณด ์…‹ ๋ชจ๋‘ 0
17+
- ์Œ์ˆ˜ ์–‘์ˆ˜ 0 ๋“ฑ์œผ๋กœ ์กฐ๊ฑด์„ ๋‚˜๋ˆ„์ง€ ์•Š๊ณ  min๊ณผ max๋กœ๋งŒ ๊ตฌ๋ถ„ํ•ด๋„ ์ถฉ๋ถ„ํ•˜๋‹ค
18+
- max_res์™€ min_res๋Š” ๊ณฑํ•ด์ง€๋ฏ€๋กœ ์ดˆ๊ธฐํ™”๋ฅผ 1๋กœ ํ•œ๋‹ค (๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์ธ๋ฑ์Šค๋กœ ๋ฐ˜๋ณตํ•˜๊ณ  1๋ถ€ํ„ฐ ์‹œ์ž‘)
19+
20+
21+
nums์˜ ๊ธธ์ด : n
22+
23+
TC : O(N)
24+
25+
SC : O(1)
1226
"""
27+
1328
class Solution:
14-
def maxSubArray(self, nums: List[int]) -> int:
15-
total = nums[0]
16-
maxTotal = nums[0]
17-
for i in range(1, len(nums)) :
18-
if (total < 0) :
19-
total = nums[i]
20-
else :
21-
total += nums[i]
22-
maxTotal = max(total, maxTotal)
23-
return (maxTotal)
29+
def maxProduct(self, nums: List[int]) -> int:
30+
max_total, max_res, min_res = nums[0], 1, 1
31+
for num in nums :
32+
min_res, max_res = min(num, max_res * num, min_res * num), \
33+
max(num, max_res * num, min_res * num)
34+
max_total = max(max_total, max_res)
35+
return max_total

โ€Žmaximum-subarray/sungjinwi.py

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
"""
2+
/ํ’€์ด ๋ด๋„ ์ž˜ ์ดํ•ด ๋ชปํ•ด์„œ ์ถ”๊ฐ€ ์ฝ”๋ฉ˜ํŠธ/
3+
nums[i]๊ฐ€ ๊ทธ ์ „๊นŒ์ง€ subarray์˜ ํ•ฉ total๋ณด๋‹ค ์ž‘์€ ์Œ์ˆ˜์ธ ์ผ€์ด์Šค๋Š” ์–ด๋–ป๊ฒŒ ๋˜๋Š”๊ฑฐ์ง€ ๊ณ ๋ฏผํ–ˆ๋Š”๋ฐ
4+
ex) total : -1, nums[i] = -2
5+
์–ด์ฐจํ”ผ -1์ธ ์‹œ์ ์— maxTotal์ด ์—…๋ฐ์ดํŠธ ๋์œผ๋ฏ€๋กœ total์€ nums[i]๋ถ€ํ„ฐ ๋”ํ•˜๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ์˜๋ฏธ๋กœ -2๋กœ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์Œ
6+
๋”ฐ๋ผ์„œ ์ด์ „๊นŒ์ง€ subarray์˜ ํ•ฉ๋งŒ ์Œ์ˆ˜ ์–‘์ˆ˜ ์ฒดํฌ
7+
8+
TC : for๋ฌธ ํ•œ๋ฒˆ
9+
=> O(N)
10+
SC : ์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ์“ฐ์ง€ ์•Š์œผ๋ฏ€๋กœ
11+
=> O(1)
12+
"""
13+
class Solution:
14+
def maxSubArray(self, nums: List[int]) -> int:
15+
total = nums[0]
16+
maxTotal = nums[0]
17+
for i in range(1, len(nums)) :
18+
if (total < 0) :
19+
total = nums[i]
20+
else :
21+
total += nums[i]
22+
maxTotal = max(total, maxTotal)
23+
return (maxTotal)

0 commit comments

Comments
ย (0)