题目描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
思路
常规的题目,有三四种解法,这里使用算法复杂度为O(n)的方法。
maxSum记录当前最大子序和,thisSum记录当前某子序和。
maxSum初始化为第一个元素的值,thisSum初始化为0。
遍历整个数组,thisSum加上当前元素的值,判断thisSum与maxSum的大小,若thisSum>maxSum,则更新maxSum为thisSum的值。若thisSum<0,则thisSum重置为0。
代码
public class MaxSubArray {
public int maxSubArray(int[] nums) {
int maxSum = nums[0];
int thisSum = 0;
for(int i = 0; i < nums.length; i++)
{
thisSum = thisSum + nums[i];
if(thisSum > maxSum)
maxSum = thisSum;
if(thisSum < 0)
thisSum = 0;
}
return maxSum;
}
}