假设我们有一个称为nums的数字列表,我们将定义一个函数,该函数返回最大的非相邻数字之和。这里的数字可以是0或负数。
因此,如果输入类似于[3、5、7、3、6],那么输出将为16,因为我们可以分别用3、7和6来获得16。
为了解决这个问题,我们将按照以下步骤操作:
如果nums的大小<= 2,则
返回最大数
noTake:= 0
取:= nums [0]
对于范围为1到nums的i
取:= noTake +数字[i]
noTake:= noTake和Take的最大值
返回noTake的最大值
让我们看下面的实现以更好地理解-
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