Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm giá trị lớn nhất bằng cách chèn toán tử vào giữa các số trong Python


Giả sử chúng ta có một danh sách các số được gọi là num, chúng ta phải tìm giá trị lớn nhất có thể được tạo ra bằng cách thêm bất kỳ toán tử nhị phân nào như +, -, và * vào giữa các số đã cho như chèn bất kỳ dấu ngoặc hợp lệ nào.

Vì vậy, nếu đầu vào là nums =[−6, −4, −10], thì đầu ra sẽ là 100, vì chúng ta có thể tạo biểu thức như:((−6) + (−4)) * −10.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • OPS:=danh sách các toán tử [+, -, *]

  • N:=kích thước của A

  • nếu tất cả các phần tử trong A bằng 0 thì

    • trả về 0

  • Định nghĩa một hàm dp (). Điều này sẽ mất tôi, j

  • nếu tôi giống với j, thì

    • trả về một cặp (A [i], A [i])

  • thấp:=inf, cao:=−inf

  • đối với k trong phạm vi i đến j - 1, thực hiện

    • đối với mỗi bên trái trong dp (i, k), thực hiện

      • đối với mỗi quyền trong dp (k + 1, j), thực hiện

        • đối với mỗi nhà điều hành chọn tham gia OPS, hãy thực hiện

          • res:=left op right

          • nếu res

            • thấp:=res

          • nếu res> cao thì

            • cao:=res

  • trả về cặp (thấp, cao)

  • Từ phương thức chính, hãy làm như sau -

  • ans:=dp (0, N - 1)

  • trả về giá trị thứ hai của ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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))

Đầu vào

[−6, −4, −10]

Đầu ra

100