Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬의 잎 목록에서 최소 나무의 합을 찾는 프로그램

<시간/>

nums라는 숫자 목록이 있다고 가정합니다. 이 목록은 트리의 inorder traversal에서 리프 노드를 나타냅니다. 여기서 내부 노드는 2개의 자식을 가지며 그 값은 왼쪽 서브트리의 가장 큰 잎값과 오른쪽 서브트리의 가장 큰 잎값의 곱과 같습니다. 값의 최소 합으로 트리의 합을 찾아야 합니다.

따라서 입력이 nums =[3, 5, 10]과 같으면 출력은 83이 됩니다.

파이썬의 잎 목록에서 최소 나무의 합을 찾는 프로그램

이 문제를 해결하기 위해 다음 단계를 따릅니다.

  • res :=num에 있는 모든 요소의 합
  • 숫자 크기> 1, do
    • i :=숫자의 최소 요소 인덱스
    • left :=nums[i - 1] 일 때 i> 0 그렇지 않으면 무한대
    • right :=nums[i + 1] if i
    • res :=res + (왼쪽과 오른쪽의 최소값) * nums의 i번째 요소, nums에서 i번째 요소 삭제
  • 반환 결과

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

예시 코드

class Solution:
   def solve(self, nums):
      res = sum(nums)
      while len(nums) > 1:
         i = nums.index(min(nums))
         left = nums[i - 1] if i > 0 else float("inf")
         right = nums[i + 1] if i < len(nums) - 1 else float("inf")
         res += min(left, right) * nums.pop(i)

      return res

ob = Solution()
nums = [3, 5, 10]
print(ob.solve(nums))

입력

[3, 5, 10]

출력

83