状态:dp[i]表示以第i个元素结尾的连续子数组的最大和
状态转移方程:
dp[i] = max( 0, dp[i-1] ) + nums[i];
#include <vector> using namespace std; class Solution { public: int maxSubArray(vector<int>& nums) { int n = nums.size(); vector<int> dp(n+1,0); if( nums[0] > 0 ) dp[0] = nums[0]; else dp[0] = 0; for( int i = 1; i < n; i++ ) { dp[i] = max( 0, dp[i-1] ) + nums[i]; } int ans = dp[0]; for( int i = 0; i < n; i++ ) ans = min( ans, dp[i] ); return ans; } };
文章来源: leetcode 最大子序和