java 最大子序列和

求最大子序列和:

分析:

  • 1.子序列:
    给定一个数组,它的子序列有:
    这里写图片描述

  • 2.和:
    负数
    0
    正数

  • 3.子序列是否连续
    可以分为两种情况:(1)在所有子序列中求子序列和最大的 (2) 多个子序列之和最大

所以:

情况(1):
经过分析可以看出,和最小是0,即子序列为空的时候,只要遍历数组相加,比较和为正数且最大的,即为所求。
情况(2):
遍历所有子序列,将子序列和为正数的相加,最终结果即为所求。

情况(1)代码:

时间复杂度:O(n)

  public static int getMaxSum(int[] data){
        int maxSum =0;
        int sum = 0;
        if(data==null||data.length==0){
            return 0;
        }
        for (int a :data){
            sum = sum+a;
            if(sum>maxSum){
                maxSum = sum;
            }
            if(sum<0){
                sum =0;
            }
        }
        return maxSum;
    }

猜你喜欢

转载自blog.csdn.net/Growing_way/article/details/81774114