如果您的所有输入都是> 0,则可以通过将所有数字相乘来找到最大乘积.
如果您的所有输入都是非0且具有偶数的负数,则再次通过将所有数字相乘来找到最大乘积.
因此,工作是处理零和负数.
您需要通过列表一次,随时计算正在运行的产品.如果你达到0,那么之前的所有内容都是一个候选子集,如果它比迄今为止发现的最好,那么需要保存其详细信息(起始索引,结束索引,产品).现在开始一个新的运行产品.如果您达到负数,则该项是您的总计中的条件中断.不使用负数的运行产品将被评估为最佳状态.但是现在你需要有2个正在运行的产品,一个是负数而另一个是新产品.因此,后续的乘法需要对2个列表起作用.此时我将有2个正在运行的产品.如果你打另一个负数,你的每个运行列表都需要按照前面的描述进行二分.如果你不修剪,你可能会得到很多运行列表.我认为你可以修剪运行列表只跟踪3:刚启动的子列表,带有奇数负数的连续列表和偶数奇数的负数.任何候选子列表都不是正在进行的乘法的一部分,应该在放弃之前评估它是否是最好的.
最后它的O(n)