这题和最大子列和之类的题目非常类似,我记得我当时在刷浙大pta的时候还做过,那时候使用暴力去做的,一个for里面加个比较,但是不知道为什么,到了leetcode就测试不通过了。
题目
题解
贪心(一个for,里面再比较。注意,里面的初始值要设为最小INT_MAX,不能是0)
动态
2021.12.2 动态规划
class Solution {
public:
int maxSubArray(vector<int>& nums) {
if (nums.size() == 0) return 0;
vector<int> dp(nums.size());
dp[0] = nums[0];
int result = dp[0];
for (int i = 1; i < nums.size(); i++) {
dp[i] = max(dp[i - 1] + nums[i], nums[i]); // 状态转移公式
if (dp[i] > result) result = dp[i]; // result 保存dp[i]的最大值
}
return result;
}
};
动态规划问题可以后面弄个总结,我看网上有很多这方便的资料了
2021.12.2 贪心
class Solution
{
public:
int maxSubArray(vector<int> &nums)
{
//类似寻找最大最小值的题目,初始值一定要定义成理论上的最小最大值
int result = INT_MIN;//这里很多人容易设为0,这样只能通过一部分测试用例
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;
}
};