两种算法的时间复杂度都为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;
}
}
本文介绍了两种求解子数组最大和的算法:一种是通过找规律实现,另一种是使用动态规划方法。这两种算法的时间复杂度均为O(n),适用于寻找一维数组中连续子数组的最大和。
&spm=1001.2101.3001.5002&articleId=105233319&d=1&t=3&u=a99d04dd9f044a80bb800e8d4da226f8)
4782

被折叠的 条评论
为什么被折叠?



