class Solution {
public:
    vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
        // write code here
        // 用start end 记录下最长子数组的起始和结束
        // 用 maxLen 记录最大长度
        vector<int> res;
        if(array.size() == 0)    return res;
        int start = 0, i = -1, end = 0, maxLen = INT_MIN, maxSum = INT_MIN, curSum = 0;
        for(int k = 0; k < array.size(); k++) {
            curSum += array[k];
            if(curSum > maxSum || (curSum == maxSum && k - i >= maxLen)) {
                // 注意更新条件!
                start = i + 1;
                end = k;
                maxSum = curSum;
                maxLen = k - i;
            }                      
            if(curSum < 0) {
                curSum = 0;
                i = k;                
            }
        }
        for(int k = start; k <= end; k++) {
            res.push_back(array[k]);
        }
        return res;
    }
};