题目 难度:简单
给定一个整数数组 nums
,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
代码
优化前:dp思路,我永远只需要知道当前值,和当前值+前面的的最大和谁是最大的即可。
class Solution {
public int maxSubArray(int[] nums) {
int maxSum = nums[0];//当前最大值
int len = nums.length;
int[] dp = new int[len];
dp[0] = nums[0];
for(int i=1;i<len ;i++){
dp[i] = Math.max(nums[i]+dp[i-1],nums[i]);
maxSum = Math.max(dp[i],maxSum);
}
return maxSum;
}
}
优化后:优化思路,我定义的dp数组,经过观察发现只用到了i的前一个值即i-1那么使用preMax替代i-i
public int maxSubArray(int[] nums) {
int maxSum = nums[0];//当前最大值
int preMax = nums[0];//当前最大值
for(int i=1; i < nums.length; i++){
preMax = Math.max(nums[i]+preMax,nums[i]);
maxSum = Math.max(preMax,maxSum);
}
return maxSum;
}