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