在 Python 中查找最大建筑高度的程序

假设我们有一个值 n 和另一个称为限制的对列表。我们想在一个城市建造 n 座新建筑。但是限制很少。我们可以建在一条线上,建筑物的标签从 1 到 n。限制有两个参数,因此限制[i] = (id_i, max_height_i) 表示 id_i 的高度必须小于或等于 max_height_i。城市对新建筑高度的限制如下 -

  • 每个建筑物的高度必须为 0 或正值。

  • 第一个建筑物高度必须为 0。

  • 任意两座相邻建筑物高度之差不能超过1。

我们必须找到最高建筑物的最大可能高度。

所以,如果输入像 n = 5,restrictions = [[2,1],[4,3]],那么输出将是 4,因为我们必须找到最大可能的高度,所以它可以是 4,如图所示图。

示例

让我们看看以下实现以更好地理解

def solve(n, restrictions):

   if not restrictions:

      return n-1

   resi = sorted(restrictions, key = lambda x:x[0])

   k = 0

   idx = 1

   for re in resi:

      re[1] = min(re[1], k+re[0]-idx)

      k = re[1]

      idx = re[0]

   k = resi[-1][1]

   idx = resi[-1][0]

   resi.reverse()

   for re in resi[1:]:

      re[1] = min(re[1], k-re[0]+idx)

      k = re[1]

      idx = re[0]

   resi.reverse()

   f = 0

   idx = 1

   res = 0

   for re in resi:

      ff = min(f+re[0]-idx, re[1])

      res = max(res, (re[0] - idx + f + ff) //2)

      idx = re[0]

      f = ff

   return max(f+n-idx,res)

n = 5

restrictions = [[2,1],[4,3]]

print(solve(n, restrictions))

输入

5, [[2,1],[4,3]]
输出结果
4

以上是 在 Python 中查找最大建筑高度的程序 的全部内容, 来源链接: utcz.com/z/363250.html

回到顶部