最大连续子序列的和(Java)

最大连续子序列的和(Java)

题目:对于一个最大的连续子序列的最大和而言,我们可以通过定义一个统计某一连续子序列的和的变量sum,如果说当前位置加上sum之后小于0,那么就将当前的sum变量变为0,反之就继续遍历下一个节点。
方法一:时间复杂度n^2

/**
 * @desc 最大连续子序列的和
 * @author zhaoliang
 * @date 20200412
 */
//1:n^2复杂度
public class Main42 {
    public int FindGreatestSumOfSubArray(int[] array) {
        int[] sum = new int[array.length];//用来统计0-i位置的和
        sum[0] =array[0];
        for(int i = 0;i<array.length;i++){
            sum[i] = sum[i- 1] + array[i];
        }
        int Max = sum[0];//默认第一个元素
        //i是终点,j是起点
        for(int i = 0;i<array.length;i++){
            for(int j = 0; j <=i;j++){
                if(j == 0){
                    Max = Math.max(Max,sum[i]);//说明起点在第0个位置
                }else {
                    Max = Math.max(Max,sum[i] - sum[j-1]);//j-i的和它就等于从起点到i位置之和减去从起点到j-1的位置之和;
                }

            }
        }
        return Max;
    }
}```
方法二:
时间复杂度n
```java
    public int FindGreatestSumOfSubArray(int[] array) {
        int sum = 0;
        int Max = array[0];
        for(int i = 0;i<array.length;i++){
            sum+=array[i];
            //为了防止都是负数的情况
            Max = Math.max(Max,sum);
            if(sum<0){
                sum=0;
            }
        }
        return Max;
    }
发布了71 篇原创文章 · 获赞 0 · 访问量 880

猜你喜欢

转载自blog.csdn.net/sinat_40968110/article/details/105465265