题目描述
输入一个整型数组, 数组里有正数也有负数. 数组中的一个或连续多个整数组成一个子数组. 求所有子数组的和的最大值. 要求时间复杂度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;
}
};