LintCode 最大子数组(dp)

给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。
样例
给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6

地址:http://www.lintcode.com/zh-cn/problem/maximum-subarray/

递推方程:

A[] 为待求数组,MaxSubArray[i]为前i个数字的最大子数组
MaxSubArray[i]=max(MaxSubArray[i1],MaxSubArray[i1]+A[i])

AC 代码:

class Solution {
public:
    /*
     * @param nums: A list of integers
     * @return: A integer indicate the sum of max subarray
     */
    int maxSubArray(vector<int> &nums) {
        // write your code here
        int len = nums.size();
        if(len == 0){
            return 0;
        }        
        int sum = nums[0];
        int res = sum;
        for(int i = 1; i < len; i++){
            if(sum > 0){
                sum += nums[i];
            }else if(sum < 0){
                sum = nums[i];            
            }
            res = max(res, sum);
        }
        return res;
    }
};
阅读更多
版权声明:本博客的所有内容采用Creative Commons(知识共享)许可证,作者权利:署名(BY)& 非商业性使用(NC)。转载时请务必标明文章超链接、作者信息和本声明,禁止用于商业用途。 https://blog.csdn.net/thinkerleo1997/article/details/78450621
文章标签: dp 最大子数组
所属专栏: LintCode刷题集
上一篇求绝对众数
下一篇LintCode 二叉树的最大节点
想对作者说点什么? 我来说一句
相关热词

没有更多推荐了,返回首页

关闭
关闭
关闭