Computer >> 컴퓨터 >  >> 프로그램 작성 >> 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])

  • 낮음 :=inf, 높음 :=-inf

  • i ~ j − 1 범위의 k에 대해 수행

    • dp(i, k)의 각 왼쪽에 대해 수행

      • dp(k + 1, j)의 각 오른쪽에 대해 수행

        • OPS의 각 운영자 작업에 대해 수행

          • res :=왼쪽 op 오른쪽

          • res <낮으면

            • 낮음 :=해상도

          • res> high이면

            • 높음 :=해상도

  • 리턴 쌍(낮음, 높음)

  • 주요 방법에서 다음을 수행하십시오 -

  • 답변 :=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