#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
//求子数组的最小和
//利用的是dp的思想,依次遍历数组中的每个元素,把他们相加,如果加起来大于0,则
//把当前元素之和清为0,否则则和最小和比较,更新最小和,最后得到必是子数组的最小和
//时间复杂度:o(n) 空间复杂度:o(1)
int minSum(vector<int> &num)
{
int min_sum = 0, sum = 0;
for(int i=0; i<num.size(); i++)
{
sum += num[i];
if(sum > 0) sum = 0;
if(sum < min_sum)
min_sum = sum;
}
if(min_sum == 0) //数组中只有正数
{
min_sum = num[0];
for(int i=1; i<num.size(); i++)
{
if(num[i]<min_sum)
min_sum = num[i];
}
}
return min_sum;
}
//求子数组的最大和
//利用的是dp的思想,依次遍历数组中的每个元素,把他们相加,如果加起来小于0,则
//把当前元素之和清为0,否则则和最大和比较,更新最大和,最后得到必是子数组的最大和
//时间复杂度:o(n)
int maxSum(vector<int> &num)
{
int max_sum = 0, sum =