题目面试
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。
最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。
建筑物高度可以增加的最大总和是多少?
——
输入: grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
输出: 35
算法思路
遍历得到横轴与纵轴天际线,然后遍历数组,对每一个元素,需要满足小于对应横纵轴天际线的较小值。
class Solution:
def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
h,z=[],[]
for i in range(len(grid[0])):
tp=-1
for j in range(len(grid)):
tp=max(tp,grid[j][i])
h.append(tp)
for i in grid:
z.append(max(i))
res=0
for i in range(len(grid)):
for j in range(len(grid[0])):
res+=min(h[j],z[i])-grid[i][j]
return res
执行用时 :96 ms, 在所有 Python3 提交中击败了52.40%的用户
内存消耗 :13.7 MB, 在所有 Python3 提交中击败了50.00%的用户