【发布时间】:2021-07-27 00:03:22
【问题描述】:
对于上下文,这是 Codewars 中的问题陈述: Problem Statement
它本质上是经典的“查找最大子数组和”问题,但重要的附加细节是,在给定所有负数的数组的情况下,应该返回“0”,而不仅仅是最大的负数。
首先,我完全意识到这个解决方案不是一个非常好的或有效的解决方案。话虽如此,对我来说逻辑仍然有意义,所以我不太明白为什么它适用于某些输入而不适用于其他输入。由于测试用例隐藏在 Codewars 中,我无法提供该程序无效的输入。
我尝试使用以下示例运行代码;
- [1, 0, 2, -3, 6](应该返回 6)
- [-2, 1, -3, 4, -1, 2, 1, -5, 4](应该返回 6)
- [-2, -3, 4, -1, 5, 1, 5, -3](应该返回 14)
- 等。 而且它们都运行良好
再次,我只想知道为什么这段代码不正确背后的逻辑。我不是在寻找正确的替代解决方案(我现在已经知道 Kadane 算法的存在)。这是我第一次盲目尝试解决这个问题,所以我真的 想知道我做错了什么,以便从中吸取教训。
def max_sequence(arr):
max_sum = 0
max_subarr_index = 0
for i, val in enumerate(arr):
max_sum = max(max_sum, sum(arr[max_subarr_index:i+1]), val)
if max_sum == val:
max_subarr_index = i
return max_sum
【问题讨论】: