最大子序和
1.题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
2.分析:首先是整数数组,那么就要想明白一个问题,只要两个数加起来小于0了,那么不管后面怎么样,只要加上这个小于0的树,那么绝对会使最后的和变小,那么所以只要小于零了,那么他就不能放到最大子序和里了。当然有一种特殊情况,就是所有和都是负数,当然这时候只要保留住最大非负值就可以了。
3.代码:
class Solution {
public int maxSubArray(int[] nums) {
//最大子序和
int max = nums[0];
//当前子序和
int presentSum = 0;
for (int i = 0; i < nums.length; i++) {
//当presentSum小于0时,没必要再往后加了,因为后面的不管是怎样
//加了个负数就是变小的,直接切断当前子序,让其从当前位置往后加形成新的字串
if (presentSum < 0) {
presentSum = nums[i];
} else {
presentSum += nums[i];
}
//每次循环都要和当前保留的最大子序和比较,哪怕其是非负。
max = Math.max(max, presentSum);
}
return max;
}
}