在 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