leetcode链接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
示例1:
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解题思路:使用一个变量max来记录当前的最大值,从数组的第一个元素开始遍历相加,每加入一个元素,判断加入后的和与当前元素比较,sum取最大值,然后比较更新max的值,遍历结束后,max就是所求的最大值。
class Solution {
public int maxSubArray(int[] nums) {
if(nums==null || nums.length==0){
return 0;
}
int sum = nums[0];
int max = sum;
for(int i=1;i<nums.length;i++){
sum = sum + nums[i];
if(sum<nums[i]){
sum = nums[i];
}
max = Math.max(max,sum);
}
return max;
}
}