最大子序列之和

问题:给定一个数组,其中至少存在一个不小于零的数,求最大子序列之和全部序列
方法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;
        }
    }
}

你可能感兴趣的:(算法)