dp[i]代表以array[i]为结尾的序列的最大和,dp[0] = array[0]; dp[i+1] = dp[i] > 0? dp[i] + array[i+1] : array[i+1]。
可以只用一个变量代替数组,即sum = 0; sum = sum > 0 ? sum + array[i] : array[i],过程中记录sum的最大值。
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int ans = 0x80000000, sum = 0, len = array.size();
for (int i = 0; i < len; ++i){
if (sum <= 0) sum = array[i];
else sum += array[i];
if (sum > ans) ans = sum;
}
return ans;
}
};