【力扣】807:保持城市天际线

题目面试

在二维数组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%的用户

发布了317 篇原创文章 · 获赞 44 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Heart_for_Ling/article/details/105613548