题目
- 输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
- 要求时间复杂度为O(n)。
示例
- 示例1
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
代码
- dp做法O(n)
class Solution {
public int maxSubArray(int[] nums) {
int len = nums.length;
if(nums.length == 0) return 0;
int[] dp = new int[len]; // dp[i] 代表前 i 位组成的连续子数组的最大值
dp[0] = nums[0]; // 第一位的最大值就是第一位本身
int res = dp[0];
for(int i = 1; i < len; i++){
dp[i] = Math.max(dp[i-1] + nums[i],nums[i]);
res = Math.max(res,dp[i]);
}
return res;
}
}
代码分析
:1、dp[i] 代表前 i 位组成的连续子数组的最大值
2、状态转移:dp[i] = dp[i−1] + nums[i]
φ( ̄∇ ̄o)