本文将对LeetCode原题 保持城市天际线进行思路上的讲解,并且给出golang语言的实现,最后进行相应的复杂度分析。
原题描述
LeetCode 807给定一个n*n 大小的grid数组,grid[i][j]表示这个城市坐标点(i, j)处有一个高为grid[i][j]的建筑物,然后现在可以增加建筑物的高度,但是要求不能改变从四个主要方向上去看,看到的城市的天际线,如下图为四个方向上看到的城市的天际线,求最多能增加的建筑物的总高度。

思路简述
很容易想到,任何一个建筑只要其增加后的高度不要超过其所在的行所在的列原本最高建筑的高度即可,这样是不会影响城市天际线的。因此,思路就是先预处理得到每一行每一列最高建筑物的高度。然后考虑每一个点,其最高能增加到所在行最高建筑的高度和所在列最高建筑的高度中的最小值。
代码实现
func maxIncreaseKeepingSkyline(grid [][]int) int {
// 每一个点只能增加到其所在的行和所在的列两个最高值中的较小值
// 预处理得到每一行每一轮的最大值
n := len(grid)
rowMax := make([]<

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



