class Solution
{
public:
int maxSubArray(vector<int> &nums)
{
//类似寻找最大最小值的题目,初始值一定要定义成理论上的最小最大值
int result = INT_MIN;
int numsSize = int(nums.size());
//因为只需要知道dp的前一项,我们用int代替一维数组
int dp(nums[0]);
result = dp;
for (int i = 1; i < numsSize; i++)
{
dp = max(dp + nums[i], nums[i]);
result = max(result, dp);
}
return result;
}
};
动态规划:时间n,空间1
class Solution
{
public:
int maxSubArray(vector<int> &nums)
{
//类似寻找最大最小值的题目,初始值一定要定义成理论上的最小最大值
int result = INT_MIN;
int numsSize = int(nums.size());
int sum = 0;
for (int i = 0; i < numsSize; i++)
{
sum += nums[i];
result = max(result, sum);
//如果sum < 0,重新开始找子序串
if (sum < 0)
{
sum = 0;
}
}
return result;
}
};
贪心算法:时间n,空间1