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

Python에서 목록의 인접하지 않은 요소의 최대 합을 찾는 프로그램

<시간/>

nums라는 숫자 목록이 있다고 가정하고 인접하지 않은 숫자의 가장 큰 합계를 반환하는 함수를 정의합니다. 여기서 숫자는 0 또는 음수일 수 있습니다.

따라서 입력이 [3, 5, 7, 3, 6]과 같으면 3, 7, 6을 사용하여 get16을 얻을 수 있으므로 출력은 16이 됩니다.

이 문제를 해결하기 위해 다음 단계를 따르겠습니다-

  • 숫자의 크기가 <=2이면

    • 최대 숫자 반환

  • 노테이크 :=0

  • 가져 가라 :=nums[0]

  • 범위 1에서 숫자 크기까지의 i에 대해

    • take :=noTake + nums[i]

    • noTake :=noTake 및 take의 최대값

  • noTake 및 take의 최대값을 반환합니다.

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution:
   def solve(self, nums):
      if len(nums) <= 2:
         return max(nums)
      noTake = 0
      take = nums[0]
      for i in range(1, len(nums)):
         take, noTake = noTake + nums[i], max(noTake, take)
         return max(noTake, take)
ob = Solution()
nums = [3, 5, 7, 3, 6]
print(ob.solve(nums))

입력

[3, 5, 7, 3, 6]

출력

16