输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
题解
- 定义一个与原数组相同大小的数组 dp
- 默认原数组的第一个数为 连续子数组的最大值 maxNum
- dp[i-1] 是为保存上一个连续数组的最大值二设置的,方便下一个数据的计算
- dp[i] 保存当前位置为 连续子数组最后一个数据的时候的最大值
- 核心是判断 dp[i-1] 的值是不是大于0
class Solution {
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
int maxSum = nums[0];
dp[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
// 核心是判断 dp[i-1] 是不是大于0
if(dp[i-1]>0){
dp[i] = dp[i-1]+nums[i];
}else{
dp[i] = nums[i];
}
if(dp[i]>maxSum){
maxSum = dp[i];
}
}
return maxSum;
}
}