JZ42-题解 | #连续子数组的最大和#

连续子数组的最大和

http://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484

题目描述


输入一个长度为n的整型数组array,数组中的一个或连续多个整数组成一个子数组,子数组最小长度为1。求所有子数组的和的最大值。
数据范围:
1<=n<=2^10


题解:动态规划

代码

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
//         根据题意,数据范围n>1,所以不用考虑输入无效的情况
//         动态规划:使用临时变量
        int curSum = 0;
        int result = array[0];
        for(int i =0;i<array.size();i++){
            if(curSum <= 0)
                curSum = array[i];
            else
                curSum +=array[i];
            result = max(curSum, result);
        }
        return result;

    }
};

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
//         根据题意,数据范围n>1,所以不用考虑输入无效的情况
        //动态规划:使用数组
        //动态转移方程:dp[i] = max(dp[i-1]+array[i],array[i])
        vector<int> dp(array.size(),0);
        int result = array[0];
        dp[0] = array[0];
        for(int i =0;i<array.size();i++){
            dp[i] = max(dp[i-1]+array[i],array[i]);
            result = max(result,dp[i]);
        }
        return result;
    }
};

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
//         根据题意,数据范围n>1,所以不用考虑输入无效的情况
        int result = array[0];
        int temp = result;
        for(int i =1;i<array.size();i++){
            temp = max(array[i],temp+array[i]);
            result = max(temp,result);
        }
        return result;
    }
};
全部评论

相关推荐

06-20 17:42
东华大学 Java
凉风落木楚山秋:要是在2015,你这简历还可以月入十万,可惜现在是2025,已经跟不上版本了
我的简历长这样
点赞 评论 收藏
分享
白火同学:能。我当初应届沟通了1200,收简历50,面试10左右吧,加油投吧
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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