807. 保持城市天际线
思路:题意就是在不影响每行每列的最高高度的情况下,来尽可能的增加每个位置的高度。所以先求出每行、每列的最高高度,再去枚举每一个点,计算可以增加的高度,累计即可。
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int n=grid.size();
vector<int> r(n,0),c(n,0);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
r[i]=max(r[i],grid[i][j]);
c[j]=max(c[j],grid[i][j]);
}
}
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
int t=min(r[i],c[j]);
ans=ans+t-grid[i][j];
}
}
return ans;
}
};