53. 最大子数组和
一、贪心
使用count进行计数,每次与下一元素求和后判断是否大于result,若大于(即出现更大的子数组),记录result
判断count是否小于0,若小于0(即前面的子数组会对后面的数组产生负面的影响)
class Solution {public:int maxSubArray(vector<int>& nums) {int result = INT_MIN;int count = 0;for(int i =0;i<nums.size();i++){count += nums[i];if(count>result)result = count;if(count<=0)count=0;}return result;}};
二、动态规划
- 状态定义: dp[i]以i元素结尾的最大连续子数组和
- 状态转移方程:dp[i] = max(dp[i - 1] + nums[i], nums[i]);
```cpp class Solution { public: int maxSubArray(vector& nums) {
} };if (nums.size() == 0) return 0;vector<int> dp(nums.size(), 0); // dp[i]表示包括i之前的最大连续子序列和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;
class Solution {
public:
int maxSubArray(vector
