连续子数组的最大和

连续子数组的最大和

题目描述

输入一个整型数组, 数组里有正数也有负数. 数组中的一个或连续多个整数组成一个子数组. 求所有子数组的和的最大值. 要求时间复杂度O为(N)

动态规划(不是很清楚), 大体思路是前面数字(包括当前数字)相加的和还没有当前数字大, 则以当前数字为起点, 重新组成子数组

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        int maxSum = array[0];
        int currentSum = array[0];
        
        for (int i = 1; i < array.size(); i++ ) {
            currentSum += array[i];
            if (currentSum < array[i]) {
                currentSum = array[i];
            }
            
            if (currentSum > maxSum) {
                maxSum = currentSum;
            }
        }
        return maxSum;
    }
};

暴力法, 时间复杂度不止O(n)

class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        if (1 == array.size())
            return array[0];
        
        int max = array[0];
        long sum = 0;
        
        for (int outer = 0; outer < array.size(); outer++) {
            sum = 0;
            for (int inner = outer; inner < array.size(); inner++) {
                sum += array[inner];
                if (sum > max) {
                    max = sum;
                }
            }
        }
        
        return max;
    }
};
posted @ 2019-03-08 14:04  张飘扬  阅读(81)  评论(0编辑  收藏  举报