【发布时间】:2014-06-03 11:22:30
【问题描述】:
我想生成一个waterLevel数组,这样第i项就是第i个点的水位,然后把它们相加来解谜。
waterLevel[i] =
max(0, min(max of left neighbors, max of right neighbors) - height[i])
我可能会尝试使用Zipper 对其进行编码
waterLevels = heights.toZipper.cobind {z =>
max(0, min(max(z.left), max(z.right)) - z.focus
}.toList
有意义吗?
【问题讨论】:
-
这肯定行得通,但您需要处理边缘并确保最终不会出现负水量。
-
是的,你是对的。我会更新这个问题。不知拉链解法是不是
O(N)不扫描数组N次 -
会是二次的,绝对不理想。
-
:( 谢谢。这就是我害怕的。所以它看起来不像是拉链使用的好例子。
-
嗯,拉链让您可以非常优雅地描述计算。但是不,您可能实际上并不想在这里使用它们。