53. Maximum Subarray Easy

来源:互联网 发布:java互联网开发框架 编辑:程序博客网 时间:2024/06/08 12:48
这是一道关于动态规划的简单题,求和最大的子串。我们使用一维数组sun[i]来表示,以i结尾的子串的和最大值,当i=0时,sum[0]肯定是nums[0],当i大于0时,状态转移方程为:sum[i] = sum[i - 1] > 0? sum[i - 1] + nums[i]: nums[i]; 解释:以i结尾的最大子串和,看前一个子串和是正还是负,如果是正,无论第i个数是正还是负,都要加上前面的子串的和,这样才是最大和(因为加正数肯定值变大),如果前一个子串和是负,sun[i]就是nums[i]这个数。
class Solution {public:    int maxSubArray(vector<int>& nums) {        int sum[nums.size()];        int max;        for (int i = 0; i < nums.size(); ++i)        {        if(i == 0){sum[i] = nums[i]; max = sum[i];}        else {        sum[i] = sum[i - 1] > 0 ? sum[i - 1] + nums[i]: nums[i];        if(sum[i] > max) max = sum[i];        }        }        return max;    }};

原创粉丝点击