[LeetCode] Maximum Subarray(python, 최대 서브배열,dp)
728x90
반응형
합이 최대인 부분 배열을 찾는다
현재 값 혹은 현재값 + 이전까지의 합이 큰지 비교해서 더 큰 값을 dp배열에 넣고 최대 값을 리턴하면 된다.
O(n)이 걸린다
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
answer=[nums[0]]
for i in range(1,len(nums)):
answer.append(nums[i]+(answer[i-1] if answer[i-1]>0 else 0))
return max(answer)
* 카데인 알고리즘 (가끔 알고리즘이나 자료구조 공부할 때 항상 등장하는 부분배열 최대값 구하기 알고리즘이다
O(n)에 구할 수 있다
현재의 부분 배열 합과 리턴해줄 최대값을 비교해 더 큰 값으로 계속 갱신해준다
import sys
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
ans=-sys.maxsize
temp=0
for num in nums:
temp=max(temp+num,num)
ans=max(ans,temp)
return ans
728x90
반응형
'Leetcode' 카테고리의 다른 글
[LeetCode] 198. house robber (dp, python) (0) | 2020.10.30 |
---|---|
[Leetcode] climbstairs (python, dp) (0) | 2020.10.30 |
[LeetCode] Fibonacci number (dp, 파이썬) (0) | 2020.10.21 |
leetcode- single number(비트연산자, 파이썬) (0) | 2020.10.12 |
LeetCode -Intersection of Two Arrays (투포인터, 이분탐색, 파이썬) (0) | 2020.10.12 |
TAGS.