程序在python的循环列表中查找不相邻元素的总和

假设我们有一个称为nums的数字列表,它表示一个循环列表。我们必须找到最大的不相邻数字之和。

因此,如果输入类似于nums = [10,3,4,8],那么输出将为14,因为我们可以取10和4。我们不能取10和8,因为它们是相邻的。

为了解决这个问题,我们将遵循以下步骤-

  • n:= nums的大小

  • nums1:= nums [从索引0到n-2]

  • nums2:= nums [从索引1到结尾]

  • 定义一个功能f()。这需要我

  • 如果i> = nums1的大小,则

    • 返回0

  • 返回nums1 [i] + f(i + 2)和f(i + 1)的最大值

  • 定义一个功能g()。这将花费j

  • 如果j> = nums2的大小,则

    • 返回0

  • 返回nums2 [j] + g(j + 2)和g(j + 1)的最大值

  • 从主要方法中执行以下操作-

  • 返回f和g的最大值

让我们看下面的实现以更好地理解-

示例

class Solution:
   def solve(self, nums):
      n = len(nums)
      nums1 = nums[: n - 1]
      nums2 = nums[1:]
      def f(i):
         if i >= len(nums1):
            return 0
         return max(nums1[i] + f(i + 2), f(i + 1))
      def g(j):
         if j >= len(nums2):
            return 0
         return max(nums2[j] + g(j + 2), g(j + 1))
      return max(f(0), g(0))
ob = Solution()nums = [10, 3, 4, 8]
print(ob.solve(nums))

输入值

[10, 3, 4, 8]

输出结果

14
猜你喜欢