Skip to content

Commit 25f4d4c

Browse files
committed
feat: Add Maximum Subarray solutions
1 parent 1205cd0 commit 25f4d4c

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
class Solution:
2+
def maxSubArray(self, nums: List[int]) -> int:
3+
"""
4+
Intuition:
5+
μ΄μ „κΉŒμ§€μ˜ λˆ„μ ν•©μ—μ„œ ν˜„μž¬ μ›μ†Œλ₯Ό μΆ”κ°€ν• μ§€ 말지에 λŒ€ν•œ
6+
결정을 λ§€ iterationλ§ˆλ‹€ λ°˜λ³΅ν•œλ‹€.
7+
ν˜„μž¬ μ›μ†Œλ₯Ό μΆ”κ°€ν–ˆμ„ 경우(λˆ„μ ν•© + ν˜„μž¬ μ›μ†Œ)와
8+
ν˜„μž¬ μ›μ†Œλ₯Ό μ‹œμž‘μœΌλ‘œ ν•˜λŠ” 경우(ν˜„μž¬ μ›μ†Œ)λ₯Ό λΉ„κ΅ν•˜μ—¬
9+
dp 배열을 κ°±μ‹ ν•œλ‹€.
10+
11+
Time Complexity:
12+
O(N):
13+
리슀트λ₯Ό 1번 μˆœνšŒν•˜λ©° 닡을 μ°ΎμœΌλ―€λ‘œ,
14+
O(N)의 μ‹œκ°„λ³΅μž‘λ„κ°€ μ†Œμš”λœλ‹€.
15+
16+
Space Complexity:
17+
O(N):
18+
dp 배열에 N개의 time step을 μ €μž₯ν•˜λ―€λ‘œ
19+
O(N)의 κ³΅κ°„λ³΅μž‘λ„κ°€ μ†Œμš”λœλ‹€.
20+
21+
Key takeaway:
22+
μ΄ˆκΈ°μ—λŠ” two pointer 방식을 μƒκ°ν–ˆμœΌλ‚˜
23+
해결을 ν•˜μ§€ λͺ»ν•΄μ„œ λ‹΅μ•ˆμ„ ν™•μΈν–ˆλ‹€.
24+
O(N)의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§€λŠ” 경우, DP도 풀이가
25+
될 수 μžˆμŒμ„ μΈμ§€ν•˜μž.
26+
"""
27+
dp = [0 for _ in nums]
28+
dp[0] = nums[0]
29+
for i in range(1, len(nums)):
30+
cumsum = dp[i - 1] + nums[i]
31+
cur = nums[i]
32+
if cumsum > cur:
33+
dp[i] = cumsum
34+
else:
35+
dp[i] = cur
36+
37+
return max(dp)

0 commit comments

Comments
Β (0)