문제 풀이 방식
kadane's algorithm을 활용한 풀이
구간의 최대 합을 구하기 위해 사용할 수 있는 알고리즘으로 주요 수식은 아래와 같다.
S[i] = Math.max(arr[i], arr[i] + S[i-1])
S 배열은 이 구간까지의 최대 합으로 만약 최대 합보다 현재 인덱스 배열의 값이 크다면 초기화를 시켜주는 방식이다.
주의할 점
브루트 포스 방식으로 모든 배열을 탐색하게 될 경우 O(n^2)의 시간복잡도를 가진다.
그러나 시간을 그만큼 주지 않는 경우가 대부분이므로 O(n)으로 풀어야 success를 받을 수 있다.
소스코드
class Solution {
public int maxSubArray(int[] nums) {
if(nums.length == 0) return 0;
int sum = nums[0];
int res = nums[0];
for(int i=1; i<nums.length; i++){
sum = Math.max(nums[i] , sum + nums[i]);
res = Math.max(res, sum);
}
return res;
}
}
'Leetcode 100문제 도전' 카테고리의 다른 글
[Leetcode 14/100] Find the Town Judge - Easy (0) | 2021.01.12 |
---|---|
[Leetcode 13/100] Minimum Absolute Difference in BST - Easy (0) | 2021.01.11 |
[Leetcode 11/100] First Bad Version - Easy (0) | 2021.01.10 |
[Leetcode 10/100] Find the Smallest Divisor Given a Threshold - Medium (0) | 2021.01.10 |
[Leetcode 9/100] Beautiful Arrangement - Medium (0) | 2021.01.09 |