반응형
Java Solution
class Solution {
public int maxSubArray(int[] nums) {
//Solution 1: my solution
/**
Runtime: 9 ms, faster than 5.84% of Java online submissions for Maximum Subarray.
Memory Usage: 74.1 MB, less than 41.86% of Java online submissions for Maximum Subarray.
시간복잡도: O(n) - 아래 나올 Solution 2와 동일한 시간복잡도이나 매번 dp 값을 갱신하기 위해 참조해야 하는 점에서 중간에 품이 들어가는 듯.
공간복잡도: O(n) - dp array를 n개 원소만큼 생성해야 함
*/
int length = nums.length;
int[] dp = new int[length];
dp[0] = nums[0];
for (int i=1; i< length; i++) {
dp[i] = nums[i] + (dp[i-1]>=0 ? dp[i-1] : 0);
}
int max = Arrays.stream(dp).max().getAsInt();
return max;
// Solution 2: Another solution from discuss - https://leetcode.com/problems/maximum-subarray/discuss/20211/Accepted-O(n)-solution-in-java
/**
Runtime: 2 ms, faster than 71.29% of Java online submissions for Maximum Subarray.
Memory Usage: 73.7 MB, less than 52.41% of Java online submissions for Maximum Subarray.
시간복잡도: O(n) - 기본적으로는 for문 한 번만 돌기 때문에 O(n)인 건 위와 동일하나 부가적인 로직이 없이 간단함.
공간복잡도: O(1) - 위의 로직과 달리 dp array를 생성하지 않고 값을 갱신하는 구조.
*/
int maxSoFar = nums[0], maxEndingHere=nums[0];
for (int i=1; i< nums.length; ++i) { // 전위연산자: 작업 시작 전에 i 값 1 올리고 시작
maxEndingHere = Math.max(maxEndingHere+nums[i],nums[i]);
maxSoFar = Math.max(maxSoFar, maxEndingHere);
}
return maxSoFar;
}
}
Python Solution
Runtime: 1062 ms, faster than 52.78% of Python3 online submissions for Maximum Subarray.
Memory Usage: 27.9 MB, less than 78.04% of Python3 online submissions for Maximum Subarray.
시간복잡도: O(n) - n개 원소에 대해 for문 돈다.
공간복잡도: O(n) - dp array에 n개의 원소 배치
class Solution:
def maxSubArray(self, nums: List[int]) -> int:
N = len(nums)
dp = [0] * N
dp[0] = nums[0]
for i in range(1, len(nums)):
dp[i] = nums[i] + (dp[i-1] if dp[i-1]>=0 else 0)
return max(dp)
반응형
'정글사관학교 개발일지 > 자료구조&알고리즘' 카테고리의 다른 글
정글사관학교 41일차 TIL: 두 수의 덧셈(Leetcode #2: add-two-numbers) (0) | 2021.12.13 |
---|---|
정글사관학교 35일차 TIL: 이진탐색트리 with 연결 리스트, make & Makefile (0) | 2021.12.07 |
정글사관학교 34일차 TIL: 구조체(Struct), 동적 메모리 할당(malloc) (0) | 2021.12.05 |
정글사관학교 33일차 TIL: C언어 기초 - 포인터, 함수 (0) | 2021.12.04 |
정글사관학교 32일차 TIL: C언어 기초(문자 입력, 포인터) (0) | 2021.12.04 |