最大子序列之和

来源:互联网 发布:gre作文 知乎 编辑:程序博客网 时间:2024/05/05 17:16

问题:给定一个数组,其中至少存在一个不小于零的数,求最大子序列之和全部序列
方法1:比较每个子序列之和,算法复杂度O(n3)
方法2:比较每个点开始的子序列的大小,算法复杂度O(n2)
实现代码:

public static void main(String args[]){    private static int[] array = {20, -1, -18, 15, 45, -10, 11};    int thisSum = 0, maxSum = 0, maxFirst = 0, maxLast = 0;    for(int i = 0; i < array.length; i++){        thisSum = array[i];        if(thisSum > maxSum){            maxSum = thisSum;            maxFirst = maxLast = i;        }        for(int j = 0; j < array.length; j++){            thisSum += array[j];            if(thisSum > maxSum){                maxSum = thisSum;                maxFirst = i;                maxLast = j;            }        }    }}

方法3:算法复杂度O(n)
实现代码

public static void main(String args[]){    private static int[] array = {20, -1, -18, 15, 45, -10, 11};    int thisSum = 0, maxSum = 0, maxFirst = 0, maxLast = 0;    for(int i = 0; i < array.length; i++){        thisSum += array[i];        if(thisSum > maxSum){            maxSum = thisSum;            maxLast = i;        }        else if(thisSum < 0){            thisSum = 0;            maxFirst = i + 1;        }    }}
0 0
原创粉丝点击