我正在处理“最大乘积子数组”问题,但是我的代码遇到了问题
我解决此问题的方法是
def maxProduct(nums):
minProd = maxProd = maximum = nums[0]
for i in range(1, len(nums)):
currentNum = nums[i]
maxProd = max(currentNum, currentNum*maxProd, currentNum*minProd)
minProd = min(currentNum, currentNum*maxProd, currentNum*minProd)
maximum = max(maximum, maxProd)
return maximum
print(maxProduct([-4, -3, -2]))
我的解决方案会给我72,但给出正确解决方案的代码是:
def maxProduct(nums):
minProd = maxProd = maximum = nums[0]
for i in range(1, len(nums)):
currentNum = nums[i]
maxProd, minProd = max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)
maximum = max(maximum, maxProd)
return maximum
print(maxProduct([-4, -3, -2]))
我的解决方案和正确的解决方案似乎在做同样的事情。为什么会
maxProd, minProd = max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)
vs
maxProd = max(currentNum, currentNum*maxProd, currentNum*minProd)
minProd = min(currentNum, currentNum*maxProd, currentNum*minProd)
有很大的不同吗?
答案 0 :(得分:4)
计算第二个值时maxProd
的值是什么?
在第一个示例中,
max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)
计算然后解压并分配。
在第二个示例中,将计算并分配新的maxProd
值,然后将其用于第二个计算中。