难度:easy
Java:
动态规划:
class Solution {
public int maxSubArray(int[] nums) {
//dp[i]存储包括nums[i]的最大子序列和
int[] dp = new int[nums.length + 1];
//存储最大子序列和
int ans = nums[0];
//初始化
dp[0] = nums[0];
//动态规划
for (int i = 1; i < nums.length; i++) {
dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);
if (dp[i] > ans) {
ans = dp[i];
}
}
return ans;
}
}
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(n)
可以考虑滚动数组的思想来降一波空间复杂度:
class Solution {
public int maxSubArray(int[] nums) {
int pre = 0;
int ans = nums[0];
for (int a: nums) {
pre = Math.max(pre + a, a);
ans = Math.max(pre, ans);
}
return ans;
}
}
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
做作业做作业去了