• 动态规划,dp数组存储前一最大和、当前最大和;
  • 左区间端点更新条件:前一最大和小于0;
  • 区间端点更新条件:当前最大和更新,或者当前最大和不变但区间范围增大;
  • 遍历完成后,返回区间内的数组元素。
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> FindGreatestSumOfSubArray(vector<int>& array) {
        // write code here
        vector<int> result;
        int dp[2];
        dp[0] = array[0];
        dp[1]= 0;
        int maxValue = dp[0];
        int left = 0, right = 0;
        int tmpL = 0, tmpR = 0;
        for (int i = 1; i < array.size(); i++) {
            tmpR++;
            dp[1] = max(dp[0] + array[i], array[i]);
            if (dp[0] + array[i] < array[i]) {
                tmpL = tmpR;
            }
            if (dp[1] > maxValue || dp[1] == maxValue && (tmpR - tmpL + 1) > (right - left + 1)) {
                maxValue = dp[1];
                right = tmpR;
                left = tmpL;
            }
            dp[0] = dp[1];
        }
        for (int i = left; i <= right; i++) {
            result.push_back(array[i]);
        }
        return result;
    }
};