输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
//思路一
class Solution {
public int maxSubArray(int[] nums) {
int res=nums[0];
int max=nums[0];
for(int i=1;i<nums.length;i++){
/*
if(max<0){
max=nums[i];
}else{
max+=nums[i];
}
*/
max = Math.max(max + nums[i],nums[i]);
res=Math.max(res,max);
}
return res;
}
}
变形:max(0,子数组序列和)
```java
```java
public class Solution {
public int FindGreatestSumOfSubArray(int[] array) {
int maxsum=0;
for(int i=0;i<array.length;i++){
int thissum=0;
for(int j=i;j<array.length;j++){
thissum+=array[j];
if(thissum>maxsum)
maxsum=thissum;
}
}
return maxsum;
}
}
//复杂度O(n的三次方)