Skip to content

Commit cbe7c7b

Browse files
committed
feat: update solutions to lc problem: No.0807
No.0807.Max Increase to Keep City Skyline
1 parent 5a33645 commit cbe7c7b

File tree

6 files changed

+91
-108
lines changed

6 files changed

+91
-108
lines changed

solution/0800-0899/0807.Max Increase to Keep City Skyline/README.md

+31-38
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ gridNew = [ [8, 4, 8, 7],
4646

4747
<!-- 这里可写通用的实现逻辑 -->
4848

49-
先求出东西方向 we 每一行的最大值、南北方向 ns 每一列的最大值。
50-
51-
然后遍历二维数组 grid,对于每个元素,能增加的最大高度是 `min(we[i], ns[j]) - grid[i][j]`。累加所有元素能增加的最大高度即可。
49+
先求每一行、每一列的最大值 `rmx`, `cmx`,然后对于每个元素 `grid[i][j]`,能增加的高度是 `min(rmx[i], cmx[j]) - grid[i][j]`。累加所有能增加的高度即可。
5250

5351
<!-- tabs:start -->
5452

@@ -59,14 +57,9 @@ gridNew = [ [8, 4, 8, 7],
5957
```python
6058
class Solution:
6159
def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
62-
m, n = len(grid), len(grid[0])
63-
we = [max(item) for item in grid]
64-
ns = [max([grid[i][j] for i in range(m)]) for j in range(n)]
65-
res = 0
66-
for i in range(m):
67-
for j in range(n):
68-
res += min(we[i], ns[j]) - grid[i][j]
69-
return res
60+
rmx = [max(row) for row in grid]
61+
cmx = [max(col) for col in zip(*grid)]
62+
return sum((min(rmx[i], cmx[j]) - grid[i][j]) for i in range(len(grid)) for j in range(len(grid[0])))
7063
```
7164

7265
### **Java**
@@ -77,21 +70,21 @@ class Solution:
7770
class Solution {
7871
public int maxIncreaseKeepingSkyline(int[][] grid) {
7972
int m = grid.length, n = grid[0].length;
80-
int[] we = new int[m];
81-
int[] ns = new int[n];
73+
int[] rmx = new int[m];
74+
int[] cmx = new int[n];
8275
for (int i = 0; i < m; ++i) {
8376
for (int j = 0; j < n; ++j) {
84-
we[i] = Math.max(we[i], grid[i][j]);
85-
ns[j] = Math.max(ns[j], grid[i][j]);
77+
rmx[i] = Math.max(rmx[i], grid[i][j]);
78+
cmx[j] = Math.max(cmx[j], grid[i][j]);
8679
}
8780
}
88-
int res = 0;
81+
int ans = 0;
8982
for (int i = 0; i < m; ++i) {
9083
for (int j = 0; j < n; ++j) {
91-
res += Math.min(we[i], ns[j]) - grid[i][j];
84+
ans += Math.min(rmx[i], cmx[j]) - grid[i][j];
9285
}
9386
}
94-
return res;
87+
return ans;
9588
}
9689
}
9790
```
@@ -127,21 +120,21 @@ class Solution {
127120
public:
128121
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
129122
int m = grid.size(), n = grid[0].size();
130-
vector<int> we(m, 0);
131-
vector<int> ns(n, 0);
132-
for (int i = 0; i < m; ++i) {
133-
for (int j = 0; j < n; ++j) {
134-
we[i] = max(we[i], grid[i][j]);
135-
ns[j] = max(ns[j], grid[i][j]);
136-
}
137-
}
138-
int res = 0;
139-
for (int i = 0; i < m; ++i) {
140-
for (int j = 0; j < n; ++j) {
141-
res += min(we[i], ns[j]) - grid[i][j];
123+
vector<int> rmx(m, 0);
124+
vector<int> cmx(n, 0);
125+
for (int i = 0; i < m; ++i)
126+
{
127+
for (int j = 0; j < n; ++j)
128+
{
129+
rmx[i] = max(rmx[i], grid[i][j]);
130+
cmx[j] = max(cmx[j], grid[i][j]);
142131
}
143132
}
144-
return res;
133+
int ans = 0;
134+
for (int i = 0; i < m; ++i)
135+
for (int j = 0; j < n; ++j)
136+
ans += min(rmx[i], cmx[j]) - grid[i][j];
137+
return ans;
145138
}
146139
};
147140
```
@@ -151,21 +144,21 @@ public:
151144
```go
152145
func maxIncreaseKeepingSkyline(grid [][]int) int {
153146
m, n := len(grid), len(grid[0])
154-
we := make([]int, m)
155-
ns := make([]int, n)
147+
rmx := make([]int, m)
148+
cmx := make([]int, n)
156149
for i := 0; i < m; i++ {
157150
for j := 0; j < n; j++ {
158-
we[i] = max(we[i], grid[i][j])
159-
ns[j] = max(ns[j], grid[i][j])
151+
rmx[i] = max(rmx[i], grid[i][j])
152+
cmx[j] = max(cmx[j], grid[i][j])
160153
}
161154
}
162-
res := 0
155+
ans := 0
163156
for i := 0; i < m; i++ {
164157
for j := 0; j < n; j++ {
165-
res += min(we[i], ns[j]) - grid[i][j]
158+
ans += min(rmx[i], cmx[j]) - grid[i][j]
166159
}
167160
}
168-
return res
161+
return ans
169162
}
170163
171164
func max(a, b int) int {

solution/0800-0899/0807.Max Increase to Keep City Skyline/README_EN.md

+30-35
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,9 @@ gridNew = [ [8, 4, 8, 7],
7171
```python
7272
class Solution:
7373
def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
74-
m, n = len(grid), len(grid[0])
75-
we = [max(item) for item in grid]
76-
ns = [max([grid[i][j] for i in range(m)]) for j in range(n)]
77-
res = 0
78-
for i in range(m):
79-
for j in range(n):
80-
res += min(we[i], ns[j]) - grid[i][j]
81-
return res
74+
rmx = [max(row) for row in grid]
75+
cmx = [max(col) for col in zip(*grid)]
76+
return sum((min(rmx[i], cmx[j]) - grid[i][j]) for i in range(len(grid)) for j in range(len(grid[0])))
8277
```
8378

8479
### **Java**
@@ -87,21 +82,21 @@ class Solution:
8782
class Solution {
8883
public int maxIncreaseKeepingSkyline(int[][] grid) {
8984
int m = grid.length, n = grid[0].length;
90-
int[] we = new int[m];
91-
int[] ns = new int[n];
85+
int[] rmx = new int[m];
86+
int[] cmx = new int[n];
9287
for (int i = 0; i < m; ++i) {
9388
for (int j = 0; j < n; ++j) {
94-
we[i] = Math.max(we[i], grid[i][j]);
95-
ns[j] = Math.max(ns[j], grid[i][j]);
89+
rmx[i] = Math.max(rmx[i], grid[i][j]);
90+
cmx[j] = Math.max(cmx[j], grid[i][j]);
9691
}
9792
}
98-
int res = 0;
93+
int ans = 0;
9994
for (int i = 0; i < m; ++i) {
10095
for (int j = 0; j < n; ++j) {
101-
res += Math.min(we[i], ns[j]) - grid[i][j];
96+
ans += Math.min(rmx[i], cmx[j]) - grid[i][j];
10297
}
10398
}
104-
return res;
99+
return ans;
105100
}
106101
}
107102
```
@@ -137,21 +132,21 @@ class Solution {
137132
public:
138133
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
139134
int m = grid.size(), n = grid[0].size();
140-
vector<int> we(m, 0);
141-
vector<int> ns(n, 0);
142-
for (int i = 0; i < m; ++i) {
143-
for (int j = 0; j < n; ++j) {
144-
we[i] = max(we[i], grid[i][j]);
145-
ns[j] = max(ns[j], grid[i][j]);
146-
}
147-
}
148-
int res = 0;
149-
for (int i = 0; i < m; ++i) {
150-
for (int j = 0; j < n; ++j) {
151-
res += min(we[i], ns[j]) - grid[i][j];
135+
vector<int> rmx(m, 0);
136+
vector<int> cmx(n, 0);
137+
for (int i = 0; i < m; ++i)
138+
{
139+
for (int j = 0; j < n; ++j)
140+
{
141+
rmx[i] = max(rmx[i], grid[i][j]);
142+
cmx[j] = max(cmx[j], grid[i][j]);
152143
}
153144
}
154-
return res;
145+
int ans = 0;
146+
for (int i = 0; i < m; ++i)
147+
for (int j = 0; j < n; ++j)
148+
ans += min(rmx[i], cmx[j]) - grid[i][j];
149+
return ans;
155150
}
156151
};
157152
```
@@ -161,21 +156,21 @@ public:
161156
```go
162157
func maxIncreaseKeepingSkyline(grid [][]int) int {
163158
m, n := len(grid), len(grid[0])
164-
we := make([]int, m)
165-
ns := make([]int, n)
159+
rmx := make([]int, m)
160+
cmx := make([]int, n)
166161
for i := 0; i < m; i++ {
167162
for j := 0; j < n; j++ {
168-
we[i] = max(we[i], grid[i][j])
169-
ns[j] = max(ns[j], grid[i][j])
163+
rmx[i] = max(rmx[i], grid[i][j])
164+
cmx[j] = max(cmx[j], grid[i][j])
170165
}
171166
}
172-
res := 0
167+
ans := 0
173168
for i := 0; i < m; i++ {
174169
for j := 0; j < n; j++ {
175-
res += min(we[i], ns[j]) - grid[i][j]
170+
ans += min(rmx[i], cmx[j]) - grid[i][j]
176171
}
177172
}
178-
return res
173+
return ans
179174
}
180175
181176
func max(a, b int) int {

solution/0800-0899/0807.Max Increase to Keep City Skyline/Solution.cpp

+13-13
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ class Solution {
22
public:
33
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
44
int m = grid.size(), n = grid[0].size();
5-
vector<int> we(m, 0);
6-
vector<int> ns(n, 0);
7-
for (int i = 0; i < m; ++i) {
8-
for (int j = 0; j < n; ++j) {
9-
we[i] = max(we[i], grid[i][j]);
10-
ns[j] = max(ns[j], grid[i][j]);
5+
vector<int> rmx(m, 0);
6+
vector<int> cmx(n, 0);
7+
for (int i = 0; i < m; ++i)
8+
{
9+
for (int j = 0; j < n; ++j)
10+
{
11+
rmx[i] = max(rmx[i], grid[i][j]);
12+
cmx[j] = max(cmx[j], grid[i][j]);
1113
}
1214
}
13-
int res = 0;
14-
for (int i = 0; i < m; ++i) {
15-
for (int j = 0; j < n; ++j) {
16-
res += min(we[i], ns[j]) - grid[i][j];
17-
}
18-
}
19-
return res;
15+
int ans = 0;
16+
for (int i = 0; i < m; ++i)
17+
for (int j = 0; j < n; ++j)
18+
ans += min(rmx[i], cmx[j]) - grid[i][j];
19+
return ans;
2020
}
2121
};

solution/0800-0899/0807.Max Increase to Keep City Skyline/Solution.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
func maxIncreaseKeepingSkyline(grid [][]int) int {
22
m, n := len(grid), len(grid[0])
3-
we := make([]int, m)
4-
ns := make([]int, n)
3+
rmx := make([]int, m)
4+
cmx := make([]int, n)
55
for i := 0; i < m; i++ {
66
for j := 0; j < n; j++ {
7-
we[i] = max(we[i], grid[i][j])
8-
ns[j] = max(ns[j], grid[i][j])
7+
rmx[i] = max(rmx[i], grid[i][j])
8+
cmx[j] = max(cmx[j], grid[i][j])
99
}
1010
}
11-
res := 0
11+
ans := 0
1212
for i := 0; i < m; i++ {
1313
for j := 0; j < n; j++ {
14-
res += min(we[i], ns[j]) - grid[i][j]
14+
ans += min(rmx[i], cmx[j]) - grid[i][j]
1515
}
1616
}
17-
return res
17+
return ans
1818
}
1919

2020
func max(a, b int) int {
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
class Solution {
22
public int maxIncreaseKeepingSkyline(int[][] grid) {
33
int m = grid.length, n = grid[0].length;
4-
int[] we = new int[m];
5-
int[] ns = new int[n];
4+
int[] rmx = new int[m];
5+
int[] cmx = new int[n];
66
for (int i = 0; i < m; ++i) {
77
for (int j = 0; j < n; ++j) {
8-
we[i] = Math.max(we[i], grid[i][j]);
9-
ns[j] = Math.max(ns[j], grid[i][j]);
8+
rmx[i] = Math.max(rmx[i], grid[i][j]);
9+
cmx[j] = Math.max(cmx[j], grid[i][j]);
1010
}
1111
}
12-
int res = 0;
12+
int ans = 0;
1313
for (int i = 0; i < m; ++i) {
1414
for (int j = 0; j < n; ++j) {
15-
res += Math.min(we[i], ns[j]) - grid[i][j];
15+
ans += Math.min(rmx[i], cmx[j]) - grid[i][j];
1616
}
1717
}
18-
return res;
18+
return ans;
1919
}
2020
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,5 @@
11
class Solution:
22
def maxIncreaseKeepingSkyline(self, grid: List[List[int]]) -> int:
3-
m, n = len(grid), len(grid[0])
4-
we = [max(item) for item in grid]
5-
ns = [max([grid[i][j] for i in range(m)]) for j in range(n)]
6-
res = 0
7-
for i in range(m):
8-
for j in range(n):
9-
res += min(we[i], ns[j]) - grid[i][j]
10-
return res
3+
rmx = [max(row) for row in grid]
4+
cmx = [max(col) for col in zip(*grid)]
5+
return sum((min(rmx[i], cmx[j]) - grid[i][j]) for i in range(len(grid)) for j in range(len(grid[0])))

0 commit comments

Comments
 (0)