您的位置:首页 > 编程语言 > Java开发

初学算法——最大子序列

2017-01-22 15:39 218 查看
以下三种实现方法不同,时间复杂度分别为N3,N2,N

public class MaxSonArr{

//三重For循环
public static int maxSonArr(int[] arr){
int maxSum = 0;
for (int i = 0; i < arr.length; i++) {//i:子序列第一个数的位置

for (int j = i; j < arr.length; j++) {//j:子序列长度

int sum = 0;
for (int k = i; k <= j; k++) {//累加;其实没必要,因为条件和第二层for循环实际上一摸一样的
sum += arr[k];
}
if(maxSum<sum){
maxSum = sum;
}
}
}

return maxSum;
}

//二重For循环
public static int maxSonArr2(int[] arr){
int maxSum = 0;
for (int i = 0; i < arr.length; i++) {//i:子序列第一个数的位置
int sum = 0;
for (int j = i; j < arr.length; j++) {//j:子序列长度

sum += arr[j];
if(maxSum<sum){
maxSum = sum;
}

}

}

return maxSum;
}

//一重For循环
public static int maxSonArr3(int[] arr){
int maxSum = 0;
int sum = 0;
//由于不需要知道
for (int j = 0; j < arr.length; j++) {
sum += arr[j];
if(maxSum<sum){
maxSum = sum;
}else if(sum<0){//将当前已累加的值看做起点,负值的起点绝对不可能是最佳的,因为你可以将起点向后推进而得到改善
sum=0;
}
}
return maxSum;
}
}

结果:6;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  最大子序列 java