求最大连续子序列和
需要考虑:
1 sum_max等于某个元素的值(例如某一元素是正数, 其余元素都是负数; 或者所有元素都为负数)
2 sum_max等于某一段连续元素的和
对第一种情况 用
if(sum_max < i)
{

sum_max = i;

}
就可以了

对第二种情况, 解决方法是, 从0开始遍历数组ar, 如果遍历到i时, sum < 0, 那么, 就将[0, i]中的元素舍弃, 将sum置0, 重新开始从ar[i+1]累加, 这样做的原因, 可以简单解释如下:
1 如果ar[0] < 0, 则舍弃ar[0]
2 如果不是上一种情况, 而且s = ar[0] + ar[1], s < 0, 那么说明ar[0] >= 0, ar[1] < 0, 并且ar[1] 的绝对值大于ar[0]的绝对值, 此时ar[2]及其后面的元素, 不能和ar[1]连续起来
3 如果不是上一种情况, 而且s = ar[0] + ar[1] + ar[2], s < 0, 那么说明ar[0] + ar[1] >= 0, ar[2] < 0, 并且ar[2] 的绝对值大于(ar[0] + ar[1])的绝对值, 此时ar[3]及其后面的元素, 不能和ar[2]连续起来

代码如下:

#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;

int main()
{
    vector <int> v = {-2, 11, -20, -4, 13, -5, 14, 1, -5};
    
    int sum = 0;
    int sum_max = v[0];
    
    for(auto i : v)
    {
        if(sum_max < i)
        {
            sum_max = i;
        }
    
        sum += i;
        if(sum_max < sum)
        {
            sum_max = sum;
        }
        
        if(sum < 0)
        {
            sum = 0;
        }
    }
    
    printf("sum_max: %d \n", sum_max);
    return 0;
}

xxxxxsssss
1 声望0 粉丝