Skip to content

Commit ce7c41b

Browse files
committed
add: leetcode 0807 readme
1 parent a9be35d commit ce7c41b

File tree

1 file changed

+96
-0
lines changed
  • leetcode/0807.Max-Increase-to-Keep-City-Skyline

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
# [807. Max Increase to Keep City Skyline](https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline/)
2+
3+
## 题目
4+
5+
There is a city composed of n x n blocks, where each block contains a single building shaped like a vertical square prism. You are given a 0-indexed n x n integer matrix grid where grid[r][c] represents the height of the building located in the block at row r and column c.
6+
7+
A city's skyline is the the outer contour formed by all the building when viewing the side of the city from a distance. The skyline from each cardinal direction north, east, south, and west may be different.
8+
9+
We are allowed to increase the height of any number of buildings by any amount (the amount can be different per building). The height of a 0-height building can also be increased. However, increasing the height of a building should not affect the city's skyline from any cardinal direction.
10+
11+
Return the maximum total sum that the height of the buildings can be increased by without changing the city's skyline from any cardinal direction.
12+
13+
**Example 1**:
14+
15+
![https://assets.leetcode.com/uploads/2021/06/21/807-ex1.png](https://assets.leetcode.com/uploads/2021/06/21/807-ex1.png)
16+
17+
Input: grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
18+
Output: 35
19+
Explanation: The building heights are shown in the center of the above image.
20+
The skylines when viewed from each cardinal direction are drawn in red.
21+
The grid after increasing the height of buildings without affecting skylines is:
22+
gridNew = [ [8, 4, 8, 7],
23+
[7, 4, 7, 7],
24+
[9, 4, 8, 7],
25+
[3, 3, 3, 3] ]
26+
27+
**Example 2**:
28+
29+
Input: grid = [[0,0,0],[0,0,0],[0,0,0]]
30+
Output: 0
31+
Explanation: Increasing the height of any building will result in the skyline changing.
32+
33+
**Constraints:**
34+
35+
- n == grid.length
36+
- n == grid[r].length
37+
- 2 <= n <= 50
38+
- 0 <= grid[r][c] <= 100
39+
40+
## 题目大意
41+
42+
在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。
43+
44+
最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。
45+
46+
建筑物高度可以增加的最大总和是多少?
47+
48+
## 解题思路
49+
50+
- 从数组竖直方向(即顶部,底部)看“天际线”计算出topBottomSkyline
51+
- 从数组水平方向(即左侧,右侧)看“天际线”计算出leftRightSKyline
52+
- 计算grid中每个元素与对应的topBottomSkyline和leftRightSKyline中较小值的差值
53+
- 统计所有差值的总和ans并返回
54+
55+
## 代码
56+
57+
```go
58+
package leetcode
59+
60+
func maxIncreaseKeepingSkyline(grid [][]int) int {
61+
var topBottomSkyline []int
62+
var leftRightSKyline []int
63+
for i := range grid {
64+
cur := 0
65+
for _, v := range grid[i] {
66+
if cur < v {
67+
cur = v
68+
}
69+
}
70+
leftRightSKyline = append(leftRightSKyline, cur)
71+
}
72+
for j := range grid {
73+
cur := 0
74+
for i := 0; i < len(grid[0]); i++ {
75+
if cur < grid[i][j] {
76+
cur = grid[i][j]
77+
}
78+
}
79+
topBottomSkyline = append(topBottomSkyline, cur)
80+
}
81+
var ans int
82+
for i := range grid {
83+
for j := 0; j < len(grid[0]); j++ {
84+
ans += min(topBottomSkyline[j], leftRightSKyline[i]) - grid[i][j]
85+
}
86+
}
87+
return ans
88+
}
89+
90+
func min(a, b int) int {
91+
if a < b {
92+
return a
93+
}
94+
return b
95+
}
96+
```

0 commit comments

Comments
 (0)