算法编程题-保持城市天际线

算法编程题-保持城市天际线


本文将对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([]<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值