给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
class Solution {
public int maxSubArray(int[] nums) {
int m=0;
int n=nums[0];
for(int num:nums){
//加入f(n-1)后的f(n),与自己单独开始一段f()的比较
m=Math.max(m+num,num);
//求过去最大的值与当前最大的值的比较
n=Math.max(n,m);
}
return n;
}
}
本题是一道动态规划题
先假定m为0,n为开始的最大值,
通过for循环数组,m为 f(n-1)加上nums[i]的f(n) 和 num[i] 之前的最大值
n为 之前的最大值n 和当前的m 之间的比较,n为最后的最大和。