一
核心:
跟以前的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;
}
}