动态规划:dp[i]代表以arr[i]结尾的若干个子数组中的和的最大值。
状态转移方程:dp[i] = arr[i], if dp[i -1] < 0dp[i] = dp[i - 1] + arr[i], if dp[i - 1] >= 0
然后取dp数组里的最大值就行。
class Solution {
public:
int maxsumofSubarray(vector<int>& arr) {
int len = arr.size();
int dp[len]; //以arr[i]结尾的子数组中的和的最大值;
dp[0] = arr[0];
int max = dp[0];
for(int i = 1; i < len; i++)
{
if(dp[i - 1] < 0) dp[i] = arr[i];
else dp[i] = arr[i] + dp[i - 1];
if(dp[i] > max) max = dp[i];
}
return max;
}
};


京公网安备 11010502036488号