最快的算法顺序移动数组

时间:2012-08-28 20:53:55

标签: arrays algorithm

假设您有一个具有正整数和负整数的数组。如果你站在第i个位置,你可以移动到第i + 1位或第i + 2位。任务是找到路径,如何移动,以获得所有收集值的最大总和。解决此问题的最快算法是什么?感谢。

示例:

0 1 8 -7 -10 -30 -1 -4 -5 0

0 1 8 -10 -1 -4 0 max sum -6

1 个答案:

答案 0 :(得分:3)

这是动态编程的典型例子。

对于每个位置,您将计算到达该位置可达到的最大总和。位置 i 可以从位置 i-1 i-2 到达,所以:

maxsum[i] = max(maxsum[i-2], maxsum[i-1]) + val[i]

您只需要使用起始值maxsum[<0] = 0迭代数组。

复杂性:O(n)。

0 1 8 -7 -10 -30 -1 -4 -5 0

0 1 9 2  -1  -28 -2 -6 -7 -6