【发布时间】:2020-02-12 08:54:00
【问题描述】:
我有一个递归函数,它可以找到任意两个整数之间的最大差,前提是第二个索引处的值高于第一个索引处的值:
def func(arr):
if len(arr) <= 1:
return 0;
left = arr[ : (len(arr) // 2)]
right = arr[(len(arr) // 2) : ]
leftBest = func(left)
rightBest = func(right)
crossBest = max(right) - min(left)
return max(leftBest, rightBest, crossBest)
如果给定列表[12, 9, 18, 3],那么我将计算任意两个元素i、j 之间的最大差异,这样j > i 和j 的元素减去i 的元素是最大的差异。
在这种情况下,我们有j = 2, i = 1,代表18 - 9,最大的区别是9。
我当前的算法返回9,但我希望它返回索引(1, 2)。我该如何修改这种分而治之的方法来做到这一点?
【问题讨论】:
-
如果您在浏览器中搜索“最佳股票买入卖出”,您会找到比我们在此处管理的更能解释这一点的参考资料。确保检查无限制购买和单次销售。这是一个常见的家庭作业问题。
-
返回索引就是这样:返回每个索引,而不是值。如果您在定位值时没有保留索引,则使用
index检索它。
标签: python algorithm list divide-and-conquer