|
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