通过在Python中的数字之间插入运算符来查找最大值的程序
假设我们有一个称为nums的数字列表,我们必须找到可以通过在给定数字之间添加+,-和*之类的任何二进制运算符并插入任何有效的括号来生成的最大值。
因此,如果输入类似于nums=[−6,-4,-10],则输出将为100,因为我们可以使表达式像:((−6)+(−4))*-10。
为了解决这个问题,我们将遵循以下步骤-
OPS:=运算符列表[+,−,*]
N:=A的大小
如果A中的所有元素均为0,则
返回0
定义一个功能dp()。这需要我,j
如果我和j相同
返回一对(A[i],A[i])
低:=inf,高:=-inf
对于在i到j−1范围内的k
对于dp(k+1,j)中的每个右,
res:=左op右
如果res<低,则
如果res>high,则
低:=res
高:=res
对于OPS中的每个运算符op,
对于剩下的每个dp(i,k),
返回对(低,高)
从主要方法中执行以下操作-
ans:=dp(0,N−1)
返回ans的第二个值
让我们看下面的实现以更好地理解-
示例
import operator class Solution: def solve(self, A): OPS = [operator.add, operator.sub, operator.mul] N = len(A) if not any(A): return 0 def dp(i, j): if i == j: return [A[i], A[i]] low = float("inf") high = float("−inf") for k in range(i, j): for left in dp(i, k): for right in dp(k + 1, j): for op in OPS: res = op(left, right) if res < low: low = res if res > high: high = res return [low, high] return dp(0, N − 1)[1] ob = Solution() nums = [−6, −4, −10] print(ob.solve(nums))
输入值
[−6, −4, −10]输出结果
100