[leetcode]152. Maximum Subarray

来源:互联网 发布:剑灵灵女捏脸数据下载 编辑:程序博客网 时间:2024/06/05 15:48

题目链接:https://leetcode.com/problems/maximum-subarray/description/

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.


思路:动态规划。每一步维护局部最优解maxm和全局最优解res,因为在每一步中,如果遇到负数,相加之前肯定比原值小,比当前值可能大、可能小。所以,对于每一步相加,要处理局部和全局的关系,

状态转移方程:maxm=max(maxm+nums[i] ,nums[i])

                         res=max(res,maxm)


class Solution{public:    int maxSubArray(vector<int>& nums)    {        int len=nums.size();        if (len==1)            return nums[0];        int maxm=nums[0],res=nums[0];        for(int i=1;i<len;i++)        {            maxm=max(maxm+nums[i],nums[i]);            res=max(res,maxm);        }        return res;    }};