dp

【剑指 offer】连续子数组的最大和

2019-05-03  本文已影响0人  邓泽军_3679

1、题目描述

输入一个 非空 整型数组,数组里的数可能为正,也可能为负。

数组中一个或连续的多个整数组成一个子数组。

求所有子数组的和的最大值。

要求时间复杂度为O(n)。

样例

输入:[1, -2, 3, 10, -4, 7, 2, -5]
输出:18

2、问题描述:

3、问题关键:

4、C++代码:

算法 1:

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max = -100000;
        int sum = 0;
        for (int i = 0; i < nums.size(); i++){
            if (sum < 0) {
                sum = nums[i];
            }else
                sum += nums[i];
            if(max < sum) max = sum;
        }
        return max;
    }
};

算法2:(dp)

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n = nums.size();
        int dp[n];
        dp[0] = nums[0];
        int res = nums[0];
        for (int i = 1; i < n; i ++) {
            dp[i] = max(0, dp[i - 1]) + nums[i];
            res = max(res, dp[i]);
        }
        return res;
    }
};
上一篇下一篇

猜你喜欢

热点阅读