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

如何优化MaxProductOfThree算法 将时间复杂度降至O(n)

MaxProductOfThree 算法优化方案

原代码问题分析

你原来的实现通过枚举所有三元组计算乘积取最大值,本质时间复杂度为O(N³),当数组长度较大时运算量会指数级增长,因此性能得分为0。

优化核心思路

三个数的最大乘积仅存在两种可能的场景,无需遍历所有组合:

  • 场景1:数组中最大的三个正数的乘积,适用于全为正数、仅存在1个负数的情况
  • 场景2:数组中最小的两个负数(负负得正)乘以最大的正数,适用于存在至少2个负数,且两个最小负数的乘积大于第二、第三大正数乘积的情况

仅需要维护5个关键值即可覆盖所有场景:max1(数组最大值)、max2(第二大值)、max3(第三大值)、min1(数组最小值)、min2(第二小值),最终比较两种场景的乘积取最大值即可。

O(N)时间复杂度实现代码

def solution(A):
    # 初始化最大的三个值,初始设为负无穷
    max1 = max2 = max3 = float('-inf')
    # 初始化最小的两个值,初始设为正无穷
    min1 = min2 = float('inf')
    
    for num in A:
        # 更新最大的三个值
        if num > max1:
            max3 = max2
            max2 = max1
            max1 = num
        elif num > max2:
            max3 = max2
            max2 = num
        elif num > max3:
            max3 = num
        
        # 更新最小的两个值
        if num < min1:
            min2 = min1
            min1 = num
        elif num < min2:
            min2 = num
    
    # 计算两种可能的最大乘积,取较大值
    return max(max1 * max2 * max3, min1 * min2 * max1)

逻辑说明

  • 一次遍历数组即可完成5个关键值的更新,时间复杂度为O(N),空间复杂度为O(1),远优于原实现的O(N³)
  • 覆盖所有边界场景:包括数组全为负数、存在多个负数、混合正负值、数组长度刚好为3等情况,正确性可以达到100%
  • 无需额外排序操作,性能可以达到满分标准

内容的提问来源于stack exchange,提问作者Berke Şentürk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:57:00