思路很直白的一道题。
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int n = grid.size(), ans = 0;;
vector<int> row_max(n),col_max(n); //记录每行每列的最大值
for(int i=0;i<n;i++){
int row_mx = 0 , col_mx = 0; //记录该行该列的最大值
for(int j=0;j<n;j++){
row_mx = max(row_mx,grid[i][j]);
col_mx = max(col_mx,grid[j][i]);
}
row_max[i]=row_mx; //将该行该列的最大值进行存储
col_max[i]=col_mx;
}
for(int i=0;i<n;i++){ //遍历数组,取该位置所在行列最大值中的小者减去该位置的高度加到ans中
for(int j=0;j<n;j++){
ans += min(row_max[i], col_max[j]) - grid[i][j];
}
}
return ans;
}
};