해외에서 리트코드를 많이 푼다길래 한번 들어가서 Easy단계의 문제를 풀어보았다. 최대부분합 문제로 자료구조시간에 배웠던 문제였다.
class Solution:
def maxSubArray(self, nums:list) -> int:
mxSum = 0
sum = 0
for i in nums:
if sum+i > 0:
sum += i
else:
sum = 0
mxSum = max(mxSum, sum)
if mxSum == 0:
return max(nums)
return mxSum
리트 코드는 제출 방식이 class를 선언 후 그 메소드를 구현하는 방식이다. 배열이 [-2,1,-3,4,-1,2,1,-5,4] 으로 주어진다면 코드는 다음과 같은 방식으로 동작한다.
이렇게 구현하면 연속된 부분집합 중 가장 큰 값을 O(n)의 시간에 구현할 수 있다. 하지만 주어진 배열이 음수로만 이루어진 배열이라면 ex)[-2,-1,-3] 음수 값 중 가장 큰 값을 반환해주는 것으로 해결하였다.