题解 | #子数组的最大累加和问题#

子数组的最大累加和问题

http://www.nowcoder.com/practice/554aa508dd5d4fefbf0f86e5fe953abd

动态规划:
dp[i]代表以arr[i]结尾的若干个子数组中的和的最大值。
状态转移方程:
dp[i] = arr[i], if dp[i -1] < 0
dp[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;
    }
};
全部评论

相关推荐

刷牛客的我很豁达:你是不是对算法有什么误解,你没手握两篇顶刊顶会,还想搞算法岗,有顶刊顶会在算法岗算才入门
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务