@@ -46,9 +46,7 @@ gridNew = [ [8, 4, 8, 7],
46
46
47
47
<!-- 这里可写通用的实现逻辑 -->
48
48
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] ` 。累加所有能增加的高度即可。
52
50
53
51
<!-- tabs:start -->
54
52
@@ -59,14 +57,9 @@ gridNew = [ [8, 4, 8, 7],
59
57
``` python
60
58
class Solution :
61
59
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 ])))
70
63
```
71
64
72
65
### ** Java**
@@ -77,21 +70,21 @@ class Solution:
77
70
class Solution {
78
71
public int maxIncreaseKeepingSkyline (int [][] grid ) {
79
72
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];
82
75
for (int i = 0 ; i < m; ++ i) {
83
76
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]);
86
79
}
87
80
}
88
- int res = 0 ;
81
+ int ans = 0 ;
89
82
for (int i = 0 ; i < m; ++ i) {
90
83
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];
92
85
}
93
86
}
94
- return res ;
87
+ return ans ;
95
88
}
96
89
}
97
90
```
@@ -127,21 +120,21 @@ class Solution {
127
120
public:
128
121
int maxIncreaseKeepingSkyline(vector<vector<int >>& grid) {
129
122
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 ] );
142
131
}
143
132
}
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;
145
138
}
146
139
};
147
140
```
@@ -151,21 +144,21 @@ public:
151
144
```go
152
145
func maxIncreaseKeepingSkyline(grid [][]int) int {
153
146
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)
156
149
for i := 0; i < m; i++ {
157
150
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])
160
153
}
161
154
}
162
- res := 0
155
+ ans := 0
163
156
for i := 0; i < m; i++ {
164
157
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]
166
159
}
167
160
}
168
- return res
161
+ return ans
169
162
}
170
163
171
164
func max(a, b int) int {
0 commit comments