这个题虽然很容易想到动态规划,有存在子结构。仔细一想这个子结构根本不需要数组来缓存,几个变量缓存就够了。
1.以当前位置结尾的累计最大值。
2.全局累计最大值
3.当前位置累计最大值的开始位置跟结束位置。
4.全局累计最大值的开始位置跟结束位置。

更新全局最大值有个约束:
1.当前位置最大值大于全部累计最大值,直接更新(没啥说的)
2.当前位置最大值等于全部累计最大值,更新结束位置跟开始位置间距长度大的那个。
需要处理好两个边界:
     边界1:更新当前位置累计最大值时,需包括前一个位置结尾累计最大值为0的情况
     边界2:更新全局累计最大值是,需包括当前位置最大值跟累计最大值相等的情况(注意条件是位置间距长度大的才更新)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
        // write code here
        int maxVal = array[0];
        int current = maxVal;
        int start = 0;
        int end = 0;
        int finalStart = 0;
        int finalEnd = 0;
        
        if(array.size() == 0){
            return array;
        }
        
        for(int i = 1;i < array.size();i++){
            if(current >= 0){
                current += array[i];
                end = i;
            }else{
                current = array[i];
                start = i;
                end = i;
            }
            
            if(current > maxVal || (current == maxVal && ((end - start) > (finalEnd - finalStart)))){
                maxVal = current;
                finalStart = start;
                finalEnd = end;
            }
        }
        
        return {array.begin()+finalStart,array.begin()+finalEnd+1};
    }
};