문제링크: https://leetcode.com/problems/maximum-subarray/
Subarray의 합이 가장 큰 결과를 반환하는 문제다.
index a~b의 Subarray의 합은 b까지의 합
- a까지의 합
이다. 따라서 b
로 끝나는 array의 최대 subarray 합을 구하기 위해 b-1
까지의 합 중 최소를 찾아내면 된다. 이 합은 단순하게 반복문과 비교를 통해 구할 수 있다.
curSum
, i - 1까지의 합 중 가장 작은 값을 minSum
이라고 한다.curSum - minSum
이 된다.curSum
과 minSum
을 비교해 더 작은 minSum
을 구한다.curSum
을 갱신하고 curSum - minSum
을 저장해놓은 result
와 비교해 더 큰 값을 result에 저장한다.var maxSubArray = function(nums) {
// i까지의 합 - i전 까지 합 중에 가장 작은 값
let curSum = nums[0];
let minSum = 0;
let result = nums[0];
for (let i = 1; i < nums.length; i++) {
minSum = Math.min(minSum, curSum);
curSum += nums[i];
result = Math.max(result, curSum - minSum);
}
return result;
};