1. 时间复杂度也为 n 。从头开始累加数组的元素和,之和若小于0,则舍弃之前的数,当前最大和重置0;之和与当前数比较,之和若小于当前数,则舍弃之前的数,当前最大和置为当前数。
int sum=array[0]; //最大和
int cur=array[0]; //累加值for(int i=1;i<array.length;i++){
if(cur<0)cur=0;
cur+=array[i];
if(sum<cur){
sum=cur;
}
}
return sum;
2.动态规划思想
- public int FindGreatestSumOfSubArray2(int[] arr,int n){
- int sum = arr[0];
- int max = arr[0];
- for(int i = 1; i < n; i++){
- sum = getMax(sum+arr[i],arr[i]);
- if(sum >= max)
- max = sum;
- }
- return max;
- }
- public int getMax(int a,int b){
- return a > b ? a: b;
- }