53 | Maximum Subarray
https://leetcode.com/problems/maximum-subarray/



작성 코드
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
prev_sum = nums[0]
for i in range(len(nums)):
for j in range(i, len(nums)):
if sum(nums[i : j + 1]) > prev_sum:
prev_sum = sum(nums[i : j + 1])
return prev_sum
- i, j 로 돌면서 nums[i:j+1]이 prev_sum 이 prev_sum 보다 클 경우 prev_sum 갱신
- 시간 초과 발생
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
prev_sum, max_right, max_left = nums[0], 0, 0
for right in range(0, len(nums)):
nums_sum = sum(nums[:right + 1])
if nums_sum > prev_sum:
prev_sum = nums_sum
max_right = right
for left in range(0, max_right + 1):
nums_sum = sum(nums[left : max_right + 1])
if nums_sum > prev_sum:
prev_sum = nums_sum
max_left = left
return max(prev_sum, max(nums))
- right 와 left 각각 큰 값을 갱신해야겠다고 생각했으나 잘못된 접근 방식
이상 코드
카데인 알고리즘
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
for i in range(1,len(nums)):
nums[i] = max(nums[i], nums[i-1] + nums[i])
return max(nums)
# [출처] https://leetcode.com/problems/maximum-subarray/discuss/20396/Easy-Python-Way
- nums[i] 와 nums[i-1] + nums[i] 중 큰 값을 nums[i]에 대입
- 간결하지만, input 값을 수정하면 좋지 않다는 의견이 있었음
정석적인 DP 방법은
✅ [C++/Python] 7 Simple Solutions w/ Explanation | Brute-Force + DP + Kadane + Divide & Conquer - LeetCode Discuss
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
에 잘 설명되어있음, 추후 추가 예정.
반응형
'Algorithm > LeetCode' 카테고리의 다른 글
| [LeetCode] (0) | 2022.05.09 |
|---|---|
| [LeetCode] 22 | Generate Parentheses (0) | 2022.05.03 |
| [LeetCode] 35 | Search Insert Position (0) | 2022.04.08 |
| [LeetCode] 1162 | As Far from Land as Possible (0) | 2022.04.05 |
| [LeetCode] 1020 | Number of Enclaves (0) | 2022.04.04 |
댓글