Timeline
Timeline
2025-12-02
init
Dynamic programming, Kadane's algorithm
Problem:
Dynamic programming idea: dp[i] represents the maximum subarray sum ending with nums[i], then
That is, if the previous subarray sum plus nums[i] is still smaller than nums[i], then simply start over from nums[i].
12345678910111213141516171819 | using std::vector;class Solution { public: int maxSubArray(vector<int> &nums) { int i, n = nums.size(); int max_sum = nums[0]; vector<int> dp(n); dp[0] = nums[0]; for (i = 1; i < n; i++) { dp[i] = std::max(dp[i - 1] + nums[i], nums[i]); max_sum = std::max(max_sum, dp[i]); } return max_sum; }}; |
leetcode hot 100 rewrite
1234567891011121314151617181920212223242526272829303132 | using std::vector;class Solution { public: int maxSubArray(vector<int> &nums) { int i, n = nums.size(); if(n == 0) return 0; int max_sum = nums[0]; // Dynamic Programming // dp[i] represents the maximum subarray sum ending with nums[i] // dp[i] = max{dp[i-1]+nums[i], nums[i]} // That is, if the previous subarray sum plus nums[i] is still smaller than nums[i], then simply start over from nums[i]. vector<int> dp(n, 0); dp[0] = nums[i]; for (i = 1; i < n; i++) { dp[i] = std::max(dp[i - 1] + nums[i], nums[i]); max_sum = std::max(max_sum, dp[i]); } return max_sum; }}; |
