알고리즘 문제풀이/leetcode
[leetcode 53] Maximum Subarray
m2162003
2020. 10. 27. 20:50
Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.
Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
Example 1:
Input: nums = [-2,1,-3,4,-1,2,1,-5,4] Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6.
Example 2:
Input: nums = [1] Output: 1
Example 3:
Input: nums = [0] Output: 0
Example 4:
Input: nums = [-1] Output: -1
Example 5:
Input: nums = [-2147483647] Output: -2147483647
풀이:
얼마전에 풀었던 문제와 비슷하지만 이번엔 연속 최대 합 찾는 문제이다.
생각보다 쉬웠다.
dp[i]는 i를 포함한 계산 값 중 큰 값을 의미한다. max(누적합 + cur, cur)
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int dp[n];
memset(dp, 0, sizeof(dp));
dp[0] = nums[0];
int answer = dp[0];
for(int i=1; i<n; i++){
dp[i] = max(nums[i], dp[i-1] + nums[i]);
answer = max(answer, dp[i]);
}
return answer;
}
};