Note:反正是简单的动态规划
不过也是我不会的东西
f(i)表示到i位置前面的子数组中最大的和
判断时候,要取max(f(i - 1) + nums[i], nums[i]);
也就是看看是单独我当前元素大,还是加上前面最大的和更大(因为前面的和可能是个负数,加到爷身上给爷整的更小了)
代码如下:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int last = 0, ans = INT_MIN;
for(int i = 0; i < nums.size(); i ++){
last = max(last + nums[i], nums[i]);
ans = max(ans, last);
}
return ans;
}
};