- 本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。
非常感谢你阅读本文~
欢迎【👍点赞】【⭐收藏】【📝评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子 https://juejin.cn/user/2771185768884824/posts 博客原创~
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。
最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。
建筑物高度可以增加的最大总和是多少?
样例 1
1 | less复制代码输入: |
提示
- 1 < grid.length = grid[0].length <= 50。
- grid[i][j] 的高度范围是: [0, 100]。
- 一座建筑物占据一个grid[i][j]:换言之,它们是 1 x 1 x grid[i][j] 的长方体。
分析
- 首先要明白天际线是什么:城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。影响轮廓的就是你所看方向上,每一行或列上最高的建筑的高度。
- 所以我们把所看方向上较低的建筑增高到恰好是最高建筑一样的高度,就是在不影响天际线的情况下,建筑物能增加的最大高度。
- 但是四个方向的天际线都不能影响,思考一下就知道上和下,左和右的天际线是一致的。那么我们只需要在增加建筑物高度的时候,同时考虑2个天际线就可以了,并且我们只能增加到其中较低的高度才能都不影响。
- 可以分两步,第一步先算出天际线,第二步统计结果。
题解
java
1 | java复制代码class Solution { |
c
1 | c复制代码int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize){ |
c++
1 | cpp复制代码class Solution { |
python
1 | python复制代码class Solution: |
go
1 | go复制代码func maxIncreaseKeepingSkyline(grid [][]int) int { |
rust
1 | rust复制代码impl Solution { |
原题传送门:https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/
欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章
本文转载自: 掘金