8주차 · 투 포인터와 슬라이딩 윈도우
보통DP배열

가장 큰 연속 부분 수열의 합

정수 배열 nums가 주어져요. 길이가 1 이상인 연속한 부분 수열 중 원소의 합이 가장 큰 값을 반환해요.

배열의 모든 원소가 음수일 수도 있어요. 이때는 가장 큰(0에 가까운) 원소 하나가 답이 돼요.

예시

예시 1
예시 2
예시 3

제한 사항

  • 1 ≤ nums.length ≤ 100,000
  • -10,000 ≤ nums[i] ≤ 10,000
각 위치에서 '여기서 끝나는 최대 합'은 max(현재 값, 이전까지의 최대 합 + 현재 값) 이에요. 이 값을 훑으면서 전체 최댓값을 갱신해요 (카데인 알고리즘).
javascript
function maxSubArray(nums) {
let best = nums[0];
let cur = nums[0];
for (let i = 1; i < nums.length; i++) {
cur = Math.max(nums[i], cur + nums[i]);
best = Math.max(best, cur);
}
return best;
}
에디터를 불러오고 있어요…
코드를 작성하고를 눌러 예시 테스트를 확인해 보세요.