[leetcode]53. Maximum Subarray

자몽·2025년 7월 16일

자료구조-알고리즘

목록 보기
11/22

문제링크: https://leetcode.com/problems/maximum-subarray/

연속된 부분 배열 중 합이 가장 큰 것을 찾는 문제.
매 순간 현재 위치까지의 최대 부분합을 유지하면서 전체 최대값을 업데이트 해 나가는 방식.
카데인 알고리즘 (Kadane's Algorithm)을 사용하면 가장 효율적으로 풀 수 있다.

순회를하며
currentSum = 아예 현재값부터 새로 시작하는게 나은지, 혹은 이전부분합에 현재값을 더하는게 나은지 비교한 값
maxSum = 현재까지의 maxSum과 currentSum 비교한 값

두 변수를 갱신하고,
순회 이후 maxSum을 리턴한다.

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let maxSum = nums[0];     // 전체 최대값
    let currentSum = nums[0]; // 현재까지의 부분합

    for (let i = 1; i < nums.length; i++) {
        // 이전 부분합에 현재값을 더하는게 나은지, 아니면 아예 현재값부터 새로 시작하는게 나은지 판단
        currentSum = Math.max(nums[i], currentSum + nums[i]);
        // 전체 최대값 갱신
        maxSum = Math.max(maxSum, currentSum);
    }

    return maxSum;
};

시간복잡도:O(n)

공간복잡도: O(1)

profile
자몽의 벨로그에 오신것을 환영합니다. 티스토리 블로그(https://jamongjjang.tistory.com/)

0개의 댓글