leetcode 53 Maximum Subarray

给定一个整型数组,其中若干项和最大,求最大值。

思路:

1. 动态规划,子状态为走到 i 的最大和,dp[i] = max(dp[i - 1], 0) + a[i],如果前一项比0小,就抛弃了。

2. 求每一项的前n向和,再遍历,减去前面出现过的最小和,从中选出最大值即可。

都很简单,这里给出dp的代码。

int maxSubArray(vector<int>& nums) {
    if (nums.size() == 0)
        return 0;
    
    int ret = INT_MIN;
    int last = 0;
    for (int i = 0; i < nums.size(); ++i) {
        last = nums[i] + max(last, 0);
        ret = max(ret, last);
    }
    return ret;
}

 

posted on 2018-01-23 09:59  willaty  阅读(80)  评论(0编辑  收藏  举报

导航