[leetcode] 최대 서브 배열

김민서·2024년 1월 22일
1

알고리즘 문제풀이

목록 보기
46/47

Maximum Subarray
링크텍스트
nums 배열에서 배열의 합이 최대가 되는 서브 배열의 합을 구하는 문제이다. 이때, 서브 배열은 배열 안에서 연속된 요소로 이루어져야 한다.
nums = [-2,1,-3,4,-1,2,1,-5,4] 일 경우,
배열의 합이 최대가 되는 서브 배열은 [4, -1, 2, 1] 이고, 이 배열의 합은 6이기 때문이 답은 6이 된다.

sums라는 배열을 만들어서 앞에서부터 이 안에 배열의 합을 저장해 나간다.
이때, 여태 앞에서 더해온 sums가 음수값이 될 경우, 이 값들을 버리고 새로 sums를 더하기 시작한다. (sums[i] = 0 + nums[i])
이렇게 저장해 나간다면 최종적으로 sums 배열에 저장된 값들 중 최대값이 답이 될 것이다.

nums: [-2, 1, -3, 4, -1, 2, 1, -5, 4]
sums: [-2, 1, -2, 4, 3, 5, 6, 1, 5]

class Solution(object):
    def maxSubArray(self, nums):
        sums = [0] * len(nums)
        sums[0] = nums[0]
        for i in range(1, len(sums)):
            if sums[i-1] < 0:
                sums[i] = 0 + nums[i]	# 앞의 값들 버리고 다시 시작
            else:
                sums[i] = sums[i-1] + nums[i]	
        return max(sums)

0개의 댓글