动态规划:
在这一遍扫描数组当中,从左到右记录当前子序列的和tempsum,若这个和不断增加,那么最大子序列的和max也不断增加(不断更新max)。如果往前扫描中遇到负数,那么当前子序列的和将会减小,即tempsum<nums[i],将此时的tempsum抛弃,并重新赋值为nums[i]。此时tempsum 将会小于max,当然max也就不更新。
public int maxSubArray(int[] nums) {
int maxsum=nums[0]; //记录最大的子序和
int tempsum=0; //记录当前子序和
for(int i=0;i<nums.length;i++){
tempsum+=nums[i];
tempsum=Math.max(nums[i], tempsum);
maxsum=Math.max(tempsum,maxsum);
}
return maxsum;
}
优解:
s
public int maxSubArrayBetter(int[] nums){
int max=nums[0];
int sum=0;
for (int i = 0; i < nums.length; i++) {
if (sum<0){
sum=nums[i];
}else {
sum+=nums[i];
}
max=Math.max(sum,max);
}
return max;
}