1. 题目
2. 思路
(1) 动态规划
- 创建状态数组dp存储以下标i为结尾的连续子数组的最大和,为了保证子数组的连续性,下标为i的元素必须处于子数组中。
- 若前一个元素的最大和小于0,则当前子数组只包含当前元素即可,否则加入前一个元素的子数组,然后计算最大和。
- 最后统计出所有连续子数组最大和中最大的一个,返回即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class Solution {
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
dp[0] = nums[0];
int res = dp[0];
for (int i = 1; i < nums.length; i++) {
if (dp[i - 1] < 0) {
dp[i] = nums[i];
} else {
dp[i] = dp[i - 1] + nums[i];
}
res = Math.max(res, dp[i]);
}
return res;
}
}