1.分析
其实做这道题只需要找出一定的规律就可以解决了,不想写密密麻麻的字了太多,看着也头晕眼花,简单点看下图吧,nums表示原数组,dp表示以nums[n]结尾的最大子系列之和的值。
以上图片中的dp[n -1] > nums[n] 应该改为dp[n -1] > 0 的时候
2.代码如下
package 求整数的子系列连续的最大和;
//复杂度O(n)动态规划
public class wordO1 {
public static int res(int[] nums) {
int temp = nums[0];
for (int i = 1; i < nums.length; i++) {
//使用Math函数中的max()方法来比较nums[i - 1]是否大于0 ,大于与nums[i]相加,不大于0,直接输出nums[i]
nums[i] += Math.max(0, nums[i - 1]);
temp = Math.max(temp, nums[i]);//输出所有子系列和中的最大的值
}
return temp;//输出结果
}
}
3. 结语
以上的空间复杂度为O(n),主要用的是动态规划的方法来解答的,其实还有一种暴力解法,就是新开一个新数组就像上图一样,用来存储最大和的值,具体就不在这写了,有兴趣的小伙伴可以直接思考一下。