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

子数组的最大累加和问题

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

子数组最大累加和

思路:sum记录每一段的总和,如果sum<0,说明前面的基础只会使后面的和变小,此时把sum置为0;
如果sum>=0,则前面的值的和,对后面的数有利,应该在此基础上加上后面的数。
每次新加一个数,把ans和sum比较,把大的值放入ans中。
最后ans中的值,即为答案。
代码如下

class Solution {
public:
    /**
     * max sum of the subarray
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxsumofSubarray(vector<int>& arr) {
        // write code here
        int sum=0,ans=0;  //sum记录状态,ans存最终答案
        for(int i=0;i<arr.size();i++){
            sum+=arr[i];  
            if(sum<0) sum=0;   //如果sum<0的话,不要再此基础上增加,把sum置为0;
            ans=max(sum,ans);  //状态转移方程
        }
        return ans;
    }
};
全部评论

相关推荐

11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
2 1 评论
分享
牛客网
牛客企业服务