给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
分析:还是先弄明白dp的三个环节
dp[i]指什么?dp[i]指包含i在内的最大子序和为i
如何得到?dp[i]=Math.max(dp[i-1]+nums[i],nums[i]),即看要不要之前的元素呗
初值?设一下第一个dp数值为nums[0]就行了
同时还要注意,dp是包含i在内的,而我们要求的不一定包含i,即我们要在所有dp数组中找到最大的,那么还要维护一个max
的值,来求do数组的最大值。
参考代码:
public int maxSubArray(int[] nums) {
int[] dp = new int[nums.length];
dp[0]=nums[0];
int ret = nums[0];
for(int i=1;i
ret=Math.max(ret,dp[i]);
}
return ret;
}
