我如何在方法内创建一个循环,以便当我们到达数组末尾或超出数组末尾时,它会中断并 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)
我正在解决以下问题:给定一个正整数数组,并且想要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)