解题思路
某位置所能加到的最大值是所在行的最大值和列的最大值的较小值
1、找出每一行和每一列的最大值
2、每一个位置累加
代码
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int n=grid[0].size();
//第一行存放行的最大值,第二行存放列的最大值
vector<vector<int>>grid_max(2,vector<int>(n));
//找到行和列的最大值
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
grid_max[0][i]=max(grid_max[0][i],grid[i][j]);
grid_max[1][j]=max(grid_max[1][j],grid[i][j]);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
ans+=min(grid_max[0][i],grid_max[1][j])-grid[i][j];
}
}
return ans;
}
};
//某一个元素能增加到的值是行列最大值中的较小值