|
1 | 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) |
| 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) |
12 | 26 | """
|
| 27 | + |
13 | 28 | 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 |
0 commit comments