题目取自LeetCode:
该题目的题意可以理解为对于矩阵中任意一个元素,在其对应的行和列分别取最大值,然后在两个最大值中取最小值即为新的矩阵元素,然后计算出所有差值即可。
以第一行第一列为例,第一行最大值为8,第一列最大值为9,那么[0][0]位置的元素可变为8,差值为8-3=5。依次计算出矩阵中所有差值并叠加即可。
完整代码如下:
int cul_num(vector<vector<int>>& grid,int i,int j){//计算当前位置满足题意的最大值
int maxi=-1,maxj=-1;
for(int ii=0;ii<grid.size();ii++){
if(maxi<grid[ii][j])maxi=grid[ii][j];
}
for(int jj=0;jj<grid.size();jj++){
if(maxj<grid[i][jj])maxj=grid[i][jj];
}
return min(maxi,maxj);
}
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int num=0;
for(int i=0;i<grid.size();i++){
for(int j=0;j<grid[0].size();j++){
int v=cul_num(grid,i,j);
num+=v-grid[i][j];
}
}
return num;
}