最大子序列和:Java实现

本文介绍了一种时间复杂度为O(N)的算法,用于找到数组中具有最大和的连续子数组。该算法通过判断当前子序列和是否小于0来决定是否重新开始计算子序列,确保了最终结果是最优子序列的和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果a[i]是负的,那么它不可能代表最优序列的起点,因为任何包含a[i]作为起点的子序列都可以通过a[i+1]作起点而得到改进。任何负的子序列不可能是最优子序列的前缀。

时间复杂度O(N)的解法:

    public int FindGreatestSumOfSubArray(int[] array) {
        if (array == null || array.length == 0) {
            return Integer.MIN_VALUE;
        }
        int currSum = Integer.MIN_VALUE;
        int maxSum = Integer.MIN_VALUE;
        for (int i = 0; i < array.length; i++) {
            currSum = (currSum < 0) ? array[i] : currSum + array[i];
            if (currSum > maxSum) maxSum = currSum;
        }
        return maxSum;
    }