解法:
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
int n = nums.size();
if (n == 0) {
return 0;
}
int res = nums.front();
int pre_max_sub_array = nums.front();
for (int i = 1; i < n; ++i) {
//更新 pre_max_sub_array ,存储遍历到当前位置最大的子数组和,如果
//pre_max_sub_array < 0, 那么当前位置最大的子数组和就是该值本身
pre_max_sub_array = pre_max_sub_array < 0 ? nums[i] : pre_max_sub_array += nums[i];
res = max(res, pre_max_sub_array);
}
return res;
}
};
总结:计算时间复杂度O(N),空间复杂度O(1),这里面使用了动态规划,状态转移方程如注释解释,值得注意的是只需要一个变量记录pre max sub array value,不需要使用数组,所以只需要O(1)的时间复杂度。