为什么在不使用两行的情况下元组拆包能提供正确的结果?

时间:2019-03-25 02:29:26

标签: python python-3.x greedy

我正在处理“最大乘积子数组”问题,但是我的代码遇到了问题

我解决此问题的方法是

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)

有很大的不同吗?

1 个答案:

答案 0 :(得分:4)

计算第二个值时maxProd的值是什么?

在第一个示例中,

max(currentNum, currentNum*maxProd, currentNum * minProd), min(currentNum, currentNum*maxProd, currentNum*minProd)
计算

然后解压并分配。

在第二个示例中,将计算并分配新的maxProd值,然后将其用于第二个计算中。