Problem Solving 2022. 8. 7. 22:04

[LeetCode] 53. Maximum Subarray (JS)

목차
  1. 핵심 아이디어
  2. 복잡도
  3. 설명
  4. 코드 (Javascript)

https://leetcode.com/problems/maximum-subarray/

 

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

핵심 아이디어

  • Sliding Window
    • 지금까지 구했던 prefix sum이 음수이면 더하는게 의미가 없으므로 값을 누적할 때 버린다

 

복잡도

  • 시간 복잡도: O(n)
    • 배열 1회 순회
  • 공간 복잡도: O(1)
    • 저장하는 변수 외에 추가적으로 사용하는 메모리 없음

 

설명

알고리즘을 개선해 가는 해설이 재미있다.

1. 브루트 포스로 가능한 모든 subarray sum을 구하면 i, j 순회하는 데 n^2 * i~j sum 구하는 데 n = O(n^3)의 시간이 걸린다

2. 연속된 배열에서 구하는 것이므로 sum 구하는 과정은 앞의 계산 결과(currentSum)을 활용하면 O(n^2)로 최적화할 수 있다

3. 누적된 sum이 음수라면 다음 값을 더하는게 의미가 없으므로 그만 순회하고 다음 값으로 넘어가면 O(n)으로 최적화할 수 있다

이 문제에서 sliding window를 떠올리는 단서는 contiguous subarray, largest sum이 아닐까 싶다

 

 

코드 (Javascript)

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    let currentSum = 0;
    let maxSum = nums[0];
    
    for (num of nums) {
        if(currentSum < 0) {
            currentSum = 0;
        }
        currentSum += num;
        maxSum = Math.max(maxSum, currentSum);
    }
    
    return maxSum;
};

 

유튜브 NeetCode 해설 영상

저작자표시 (새창열림)

'Problem Solving' 카테고리의 다른 글

[LeetCode] 153. Find Minimum in Rotated Sorted Array (JS)  (0) 2022.08.22
[LeetCode] 152. Maximum Product Subarray (JS)  (0) 2022.08.21
[LeetCode] 238. Product of Array Except Self (JS)  (0) 2022.07.31
[LeetCode] 217. Contains Duplicate (JS)  (0) 2022.07.31
[LeetCode] 121. Best Time to Buy and Sell Stock (JS)  (0) 2022.07.02
  1. 핵심 아이디어
  2. 복잡도
  3. 설명
  4. 코드 (Javascript)
'Problem Solving' 카테고리의 다른 글
  • [LeetCode] 153. Find Minimum in Rotated Sorted Array (JS)
  • [LeetCode] 152. Maximum Product Subarray (JS)
  • [LeetCode] 238. Product of Array Except Self (JS)
  • [LeetCode] 217. Contains Duplicate (JS)
이우진 기술 블로그개발자 이우진의 기술 블로그입니다
개발자 이우진
이우진 기술 블로그
  • All (86)
    • Spring Framework (20)
    • MSA (7)
      • Event Driven Architecture (3)
    • Java (3)
    • Flink (2)
    • Computer Science (9)
      • Object Oriented Programming (3)
    • Problem Solving (15)
    • Design Pattern (0)
    • React (4)
    • Javascript (2)
    • Web (3)
    • Tools & Environment (3)
    • C++ (2)
    • misc (5)
    • Essay (3)
      • 기술 회고 (5)
  • 홈
  • 태그
  • 관리자
  • 글쓰기
hELLO · Designed By 정상우.v4.2.2
[LeetCode] 53. Maximum Subarray (JS)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.