一
核心:
跟以前的dp不太一样,这个需要换个思路
假设dp[i]表示以i为结尾的最长子段的和 它和dp[i-1]的关系就是
dp[i]=max(dp[i-1]+nums[i],nums[i])
意思就是 包括前面i-1计算出来的子段和, 不包括前面的子段和,也就是只有nums[i]自己一个数
class Solution {
public int maxSubArray(int[] nums) {
if(nums.length==0){
return 0;
}
if(nums.length==1){
return nums[0];
}
int[] dp =new int[nums.length];
dp[0]=nums[0];
int max_result=dp[0];//这点还挺重要的
for(int i=1;i<nums.length;i++){
dp[i]=Math.max(dp[i-1]+nums[i],nums[i]);
if(dp[i]>max_result){
max_result=dp[i];
}
}
return max_result;
}
}