在Python中插入运算符以查找最大值的程序
假设我们有一个名为nums的数字列表,我们必须找到通过在给定数字之间添加任何二进制运算符(+, -, *)以及插入任何有效括号可以生成的最大值。
因此,如果输入为nums = [−6, −4, −10],则输出将为100,因为我们可以创建像以下这样的表达式:((-6) + (-4)) * -10。
为了解决这个问题,我们将遵循以下步骤 –
- OPS:运算符列表[+, -,*]
-
N:A的大小
-
如果A中的所有元素均为0,则
- 返回0
- 定义一个函数dp()。这将采取i,j
-
如果i与j相同,则
- 返回一对(A [i],A [i])
- low:inf,high:−inf
-
对于k在范围i到j – 1中,执行以下操作
- 对于dp(i,k)中的每个left,请执行以下操作
- 对于dp(k + 1,j)中的每个right,请执行以下操作
-
对于OPS中的每个运算符op,都执行以下操作
- res:left op right
-
如果res < low,则
-
low:= res
-
如果res > high,则
-
high:= res
- 对于dp(i,k)中的每个left,请执行以下操作
-
返回一对(low,high)
-
从主方法执行以下操作 –
-
ans:= dp(0,N – 1)
-
返回ans的第二个值
让我们看下面的实现,以便更好地理解 –
更多Python相关文章,请阅读:Python 教程
示例
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