DP法和分治法,目前只掌握了DP法,分治法看不懂
DP
class Solution {
public int maxSubArray(int[] nums) {
int[] dp=new int[nums.length];
dp[0]=nums[0];
for(int i=1;i<nums.length;i++)
{
dp[i]=Math.max(nums[i],dp[i-1]+nums[i]);
}
int first=Integer.MIN_VALUE;
for(int i=0;i<nums.length;i++)
{
first=dp[i]<first?first:dp[i];
}
return first;
}
}
将下面一层循环优化一下
class Solution {
public int maxSubArray(int[] nums) {
int[] dp=new int[nums.length];
dp[0]=nums[0];
int first=dp[0];
for(int i=1;i<nums.length;i++)
{
// dp[i]=Math.max(nums[i],dp[i-1]+nums[i]);
dp[i]=dp[i-1]>0?dp[i-1]+nums[i]:nums[i];
first=Math.max(dp[i],first);
}
return first;
}
}