题目
输入一个整形数组,数组中有正数有负数,数组中一个或连续的多个整数组成一个子数组,求所有子数组和的最大值。
一、暴力破解
直接对数组进行暴力求解,复杂度为O(n^2),代码如下:
template<typename T>
tuple<int, int, T> findMaximumSubArray(const vector<T> &arr)
{
assert(arr.size());
int left = 0, right = 0;
T sum = arr[0];
for(int i = 0; i < arr.size() - 1; ++i)
{
int tmpLeft = 0;
T tmpSum = numeric_limits<T>::min();
T tmp = 0;
for(int j = i + 1; j >= 0; --j)
{
tmp += arr[j];
if(tmpSum < tmp)
{
tmpSum = tmp;
tmpLeft = j;
}
}
if(tmpSum > sum