Zero to Hero
Published 2021. 5. 2. 23:05
53. Maximum Subarray Algorithm
 

Maximum Subarray - LeetCode

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

1. prefix sum을 이용한 풀이

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        if len(nums) == 1:
            return sum(nums)
        prefix = [nums[0]]
        for index, num in enumerate(nums):
            if index == 0:
                continue
            prefix.append(num + prefix[-1])

        result, min_prefix = -float("inf"), 0
        for item in prefix:
            result = max(result, item - min_prefix)
            min_prefix = min(min_prefix, item)
        return result

처음에 prefix에 0 패딩을 하나 넣고 시작해서 prefix sum 배열이 이상하게 나와서 조금 삽질했지만, prefix sum을 생각해냈다는 사실만으로 기분이 좋았다.

 

2....

    def maxSubArray2(self, nums: List[int]) -> int:
        if not nums:
            return 0
        cur_sum = result = nums[0]
        for num in nums[1:]:
            cur_sum = max(cur_sum + num, num)
            result = max(result, cur_sum)
            print(cur_sum, result)

cur_sum은 기존까지의 연속된 값의 합이거나, 현재의 값이다.

연속된 수의 합이 최대가 되는 경우를 찾아야하기 때문에 경우는 2가지다.

max(기존 연속된 수의 합에 다음 수를 더한 값, 그냥 다음 수) -> 이 값을 result로 경신한다.

 

이런 게 바로 보이는 사람은 무슨 느낌일까.

'Algorithm' 카테고리의 다른 글

226. Invert Binary Tree  (0) 2021.05.03
141. Linked List Cycle  (0) 2021.05.03
101. Symmetric Tree  (0) 2021.05.02
155. Min Stack  (0) 2021.04.30
160. Intersection of Two Linked Lists  (0) 2021.04.30
profile

Zero to Hero

@Doljae

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!