之前动态规划不是很清楚,所以看了答案做了,不清楚,恶补了下DP后再来重新做;
class Solution
{
public:
int maxSubArray(vector<int> &nums)
{
int res=INT_MIN,add=0;
for(int num : nums)
{
if(add+num>num)
add+=num;
else
add=num;
res=res>add?res:add;
}
return res;
}
};
当然还不够简练,现在比较?:表达式,可能更喜欢max了。再有把结果命名为res,比result少三个字母;
这是省去了dp数组,一方面减小了空间复杂度,第二求的只是一个最值。所以只需记录之前最大的即可。
class Solution
{
public:
int maxSubArray(vector<int> &nums)
{
int res=INT_MIN,add=0;
for(int num : nums)
{
add=max(num,add+num);
res=max(res,add);
}
return res;
}
};
分治法的先放放