给你一个整数数组 nums
,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和53.最大子数组和
子数组 是数组中的一个连续部分。
本题我们需要注意子数组必须是连续的,而且不需要求具体的子数组,只需要求出最大的和,可以采用动态规划来解决问题,我们创建一个_max来存储当前最大得子数组和,sum来存储当前得子树组和,当sum<0时,我们将sum = 0,以免影响接下来的数组。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int _max = INT_MIN,sum = 0;
for(auto it:nums)//增强for循环遍历数组
{
sum += it;//当前子数组
_max = max(_max,sum);//用_max来存储最大的子数组
if(sum < 0)
{sum = 0;}//当当前子数组为负时,令当前子数组为0,以免影响接下来的子数组
}
return _max;//返回当最大子数组
}
};
接下来我们以[-2,1,-3,4,-1,2,1,-5,4]来举例
这样我们就通过动态规划实时维护_max来解绝了本题
时间复杂度为o(n)