这是经典的“最大子数组和”问题,通常用Kadane’s算法来解决。思路是遍历数组,维护两个变量:
current_sum
:当前连续子数组的和。max_sum
:到目前为止的最大和。
Kadane’s算法实际上是一种动态规划的方法。它通过在每一步决策中,利用已计算的子问题(即以当前位置结束的最大子数组和),来推导出整体的最大子数组和。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
// 动态规划
int len = nums.size();
vector<int> f(len); // f[i]表示以i结尾的最大子数组和
f[0] = nums[0];
int res = f[0];
for( int i=1; i<len; i++ )
{
f[i] = max(nums[i],nums[i]+f[i-1]);
res = max(res,f[i]);
}
return res;
}
};