我如何在方法内创建一个循环,以便当我们到达数组末尾或超出数组末尾时,它会中断并 returns 求和?

How can I create a loop inside a method so that when we reach the end of the array or beyond, it breaks and returns a sum?

我正在解决以下问题:给定一个正整数数组,并且想要return数组中非相邻元素的最大和。

例如array = [75,105,120,75,90,135]

然后 max 将是 330,通过 75,120 和 135 求和得到。

我的想法是简单的写两个方法,第一个取当前最大值的索引,然后计算它后面的第2个和第3个元素(跳过相邻元素),returns中较大的一个两人

第二种方法从识别array[0]array[1]中的较大者开始;然后它将较大的索引传递给第一个方法。

我面临的挑战是我不知道如何在第二种方法中编写循环代码,以便我们遍历整个数组并在到达数组末尾时中断。我有什么想法可以添加一两行代码来实现这一点吗?

这是我的解决方案:

def nextMaximum(indexOfCurrentMax): 
    return max(array[indexOfCurrentMax+2],array[indexOfCurrentMax+3])

def maxSubsetSumNoAdjacent(array):
    total = 0 
    indexOfCurrentMax = array.index(max(array[0],array[1]))
    total += array[indexOfCurrentMax]
    
    currentMax = nextMaximum(indexOfCurrentMax)

您可以将 generator function which returns all possible combinations of non-adjacent elements and use max() passing sum() 作为 key 参数 来查找总和最大的组合:

def get_non_adjacent(src, start_index=0):
    for i in range(start_index, len(src)):
        yield src[i],
        for el in get_non_adjacent(src, i + 2):
            yield src[i], *el

array = [75, 105, 120, 75, 90, 135]
max_combination = max(get_non_adjacent(array), key=sum)