题意
思路:
要求修改后的天际线不变,增加的尽可能多。
也就是说对于一个位置来说,最多可以增加到行列的最小值。
先预处理每行每列的最小值,再遍历每个位置求和即可。
代码:
class Solution { public: int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) { int n=grid.size(),m=grid[0].size(); int a[n+1],b[m+1]; memset(a,0,sizeof a); memset(b,0,sizeof b); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ a[i]=max(a[i],grid[i][j]); b[j]=max(b[j],grid[i][j]); } } int ans=0; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ ans=ans+min(a[i],b[j])-grid[i][j]; } } return ans; } };