假设我们在一个被水包围的容器中有一些2D盒子。不幸的是,容器的左侧壁上有一个洞。这个洞的高度大于所有箱子的高度。所有箱子的长度都是1米,它们的高度是一个整数。所有箱子都放在一条线上。每隔一秒,通过集装箱插入的水量是一平方米(注意我们的问题是在2D环境中)。我们想要找到给定的盒子在水下一米的时间。 是否有任何贪心算法来有效地解决这个问题?
答案 0 :(得分:0)
我认为这个算法可以在O(n)中解决这个问题。
从第i个方框开始,我们首先到行尾找到第一个比第i个方框高的方框。因为所有方框的高度差异至少为1米所以水不能比这个盒子更进一步。然后我们从第i个盒子到第一个盒子的开头。我们在Max_Height变量中保存第i个盒子的高度。一旦我们找到一个比这个Max_Height更高的盒子我们更新Max-Height .so每当我们发现一个比Max_Height更短的盒子时(Max_Height - 盒子的高度)添加到我们的结果中。最后我们计算了所有前一个和下一个井的面积。所以我们只需要计算第一个下一个更高的距离框和第一个上一个更高的框并将其添加到我们的结果中。 就是这样。