描述

分析
动态规划问题,时间复杂度O(N)O(N)O(N).
使用数组 dp[N],其中dp[i] 表示以第 i 个元素结尾的最大子序和。
每个dp[i] 都对应两种情况:
- 加上第 i 个元素还不如不加(
dp[i] > dp[i-1] + nums[i]),此时dp[i] = nums[i]; - 加上第 i 个元素后的最大子序和比不加要大,此时
dp[i] = dp[i-1] + nums[i];
代码
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int len = nums.size();
if (len == 1) return nums[0];
int max_sum = nums[0];
vector<int> dp(len);
dp[0] = nums[0];
for (int i = 1;i < len;i++) {
int t = dp[i - 1] + nums[i];
dp[i] = t >= nums[i] ? t : nums[i];
if (dp[i] > max_sum)
max_sum = dp[i];
}
return max_sum;
}
};
本文介绍了一种利用动态规划解决最大子序和问题的方法,通过维护一个dp数组来记录以每个元素结尾的最大子序和,最终返回dp数组中的最大值。此算法的时间复杂度为O(N),适用于需要快速求解最大子序和的问题场景。
6664

被折叠的 条评论
为什么被折叠?



