找出最大的差异 - O(n)

时间:2013-12-17 01:27:00

标签: python arrays algorithm

我有一个我正在努力解决的编码挑战问题。

给定一个整数数组,遍历数组(只允许一次)将最大值的值连接到右边。您正在寻找最大的差异。

[1,2,3,6,3,1,4,3,4,2,3]
  • 1,2,3转到[4] = 6
  • 3,1转到[7] = 4
  • 3进入[9] = 4
  • 2进入[11] = 3

这个问题的可能解决方案是什么?我在python中编写了一个解决方案,可以在更长的时间内解决它。它找到了最大的差异,在这种情况下是1,2,3 go to [4]。然后递归地执行列表的其余部分。您将如何在列表的一次迭代中完成此操作?

1 个答案:

答案 0 :(得分:5)

这是一个提示,你应该能够变成代码:向后走列表。

这样考虑:3是每个值右边的最大值,直到你达到4.然后4是每个值右边的最大值,直到你击中下一个值。(如果你应该找到最左边的最大值,就像在你的示例输出中那样,直到你击中下一个4,而不是。)依此类推。

如果你可以使用O(N)临时空间,你可以建立最大值列表,然后反转它以按顺序打印出答案。 (或者你可以递归地执行它,这会将O(N)临时空间放在堆栈上。)