LeetCode 53. Maximum Subarray - Python
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.
풀이:
- 동적 계획법 중 카데인 알고리즘 활용
A[5]의 최대 부분합 = A[4]의 최대 부분합+A[5] = 3+2 = 5
A[6]의 최대 부분합 = A[5]의 최대 부분합+A[6] = 5+1 = 6
A[7]의 최대 부분합 = A[6]의 최대 부분합+A[7] = 5-5 = 0
A[8]의 최대 부분합 = A[7]의 최대 부분합+A[8] = 0+4 = 4
Solution 1 :
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
for i in range(1, len(nums)):
if nums[i - 1] > 0: #i-1의 수가 0보다 크면
nums[i] += nums[i - 1] #i번째 수와 i-1의 수를 더해서 최댓값을 찾는다.
return max(nums)
Solution 2 :
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in range(1,len(nums)):
nums[i] = max(nums[i - 1] + nums[i], nums[i])
#i-1번째 수+ i번째 수 부터 i번째 수까지 최대 값을 구한다.
return max(nums)
'Python > PS in Python' 카테고리의 다른 글
LeetCode 198. House Robber - Python (0) | 2020.09.11 |
---|---|
LeetCode 155. Min Stack - Python (0) | 2020.09.09 |
LeetCode 101. Symmetric Tree - Python (0) | 2020.09.04 |
LeetCode 1. Two Sum - Python (0) | 2020.08.31 |
LeetCode 543. Diameter of Binary Tree - Python (0) | 2020.08.25 |
댓글