You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求时间复杂度为O(n³)的最大子数组和算法及实现

O(n³) 时间复杂度的最大子数组和算法

当然存在时间复杂度为O(n³)的最大子数组和算法!它是最直观的暴力解法,思路比你已经实现的解法还要简单——就是枚举所有可能的子数组起点、终点,再通过第三层循环逐个累加计算子数组的和,全程用三层嵌套循环完成。

先澄清一个小细节

你写的那段标注为O(n²)的代码,其实实际时间复杂度也是O(n³)哦!因为每次调用sum(A[i:j+1])时,Python的sum函数会遍历从i到j的所有元素,这一步的时间复杂度是O(j-i+1),嵌套在两层循环里,总时间就变成了O(n³)。真正的O(n²)解法需要借助前缀和数组,提前计算好前缀和后,用O(1)时间就能得到任意子数组的和。

直白的O(n³)算法实现

下面是完全基于三层嵌套循环的O(n³)解法,逻辑非常清晰:

def mssl_cubic(arr):
    n = len(arr)
    max_sum = float('-inf')  # 初始设为负无穷,兼容全负数的输入情况
    start = 0
    end = 0

    # 第一层循环:枚举子数组的起始索引i
    for i in range(n):
        # 第二层循环:枚举子数组的结束索引j(j >= i)
        for j in range(i, n):
            current_sum = 0
            # 第三层循环:从i到j逐个累加元素,计算当前子数组的和
            for k in range(i, j + 1):
                current_sum += arr[k]
            # 更新最大和及对应的起止索引
            if current_sum > max_sum:
                max_sum = current_sum
                start = i
                end = j
    return max_sum, start, end

if __name__ == '__main__':
    A = [18, -10, 30, 23, -26]
    ans = mssl_cubic(A)
    print(ans)  # 输出 (51, 0, 3),对应子数组[18, -10, 30, 23]

复杂度说明

三层循环每层最多执行n次,总操作次数是$\sum_{i=0}^{n-1} \sum_{j=i}^{n-1} (j-i+1)$,最终时间复杂度为O(n³)。

不过要注意,这个算法的效率极低,只适合用来理解最大子数组和问题的最基础逻辑,实际开发中肯定会优先选择你实现的O(n)时间复杂度的Kadane算法,它是这个问题的最优解。

内容的提问来源于stack exchange,提问作者user10062624

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:04:17