两种算法的时间复杂度都为O(n)
public class maxSumOfSubArray {
/**
* 找规律
*/
public static int fun1(int[] arr){
if(arr == null || arr.length == 0){
return 0;
}
int sum = 0;
int max = arr[0];
for(int i = 0;i < arr.length;i++){
//如果之前所加之和为0或负值,则直接清零
if(sum<=0){
sum=arr[i];
}else{
//如果之前所见之和为正,则继续加
sum+=arr[i];
}
//记录最大的子数组和
if(sum>max){
max=sum;
}
}
return max;
}
/**
* 动态规划
* @param array
* @return
*/
public int fun2(int[] array) {
int res = array[0]; //记录当前所有子数组的和的最大值
int max=array[0]; //包含array[i]的连续数组最大值
for (int i = 1; i < array.length; i++) {
max=Math.max(max+array[i], array[i]);
res=Math.max(max, res);
}
return res;
}
}