var maxSubArray = function(nums) {
let max = -100000000;
let current = 0
for(let i = 0; i < nums.length; i++) {
current = Math.max(current + nums[i], nums[i])
max = Math.max(max, current)
}
return max
// 이전 누적값과 현재값 더한거랑 현재값이랑 비교해서 max에다가 비교한다
};
배열내에서 부분집합 배열들중에서 요소들의 총합이 가장 큰값을 구하는 문제이다.
처음에는 이중 for문으로 모든 배열들의 요소들의 합을 비교하는 로직으로 했지만 O(n^2) 시간 복잡도로 인해서 시간초과됐다..
저 로직으로는 한번의 for문으로 시간 복잡도가 O(n)으로 빠르게 구할 수 있다.
변수 current는 누적값과 현재 배열인덱스요소값과 비교해서 둘 중 큰값을 반환한다.
그리고 current값과 이전 max중 비교해서 큰값을 다시 max에다가 할당해주는 로직이다.
'Algorithm(Javascript)' 카테고리의 다른 글
35. Search Insert Position (leetCode) (0) | 2022.02.13 |
---|---|
알고리즘 문제 12 (0) | 2021.11.04 |
알고리즘 문제 11 (0) | 2021.11.03 |
알고리즘 문제 10 (0) | 2021.11.01 |
알고리즘 문제 9 (0) | 2021.10.28 |