子数组之和的最大值
首先,最大的子数组,必然以正数开始,这个是不用质疑的,假设从负数开始,则去掉该数,会形成更大的子数组,这和当前已经是最大的子数组矛盾。
其次,最大的子数组,必然以正数结束,这个也不用怀疑,如果以负数结束,则去掉该数,同样会形成更大的子数组,这和当前已经是最大的子数组矛盾。
那么,对于给定数组a0a1---an,从左向右扫描,得到第一个正数,作为候选最大的起点,然后依次扫描,碰到正数,肯定是子数组成员,碰到负数,则往后继续扫描,直到碰到正数。
这时,有两种情况,1是前面所有数之和仍为正,这时,加入该数。如果为负数,则以之前最后一个正数作为子数组,继续扫描后面的。