class Solution {
public int maxIncreaseKeepingSkyline(int[][] grid) {
int max_x=0;
int max_y=0;
int len=grid.length;
int[] mx=new int[len];
int []my=new int[len];
//y
for(int i=0;i<len;i++){
max_y=grid[0][i];
for (int j=0;j<len;j++){
if(grid[j][i]>=max_y){
max_y=grid[j][i];
my[i]=max_y;
}
}
}
//x
for(int m=0;m<len;m++){
max_x=grid[m][0];
for (int n=0;n<len;n++){
if(grid[m][n]>=max_x){
max_x=grid[m][n];
mx[m]=max_x;
}
}
}
int count=0;
for(int x=0;x<len;x++){
int min=0;
for(int y=0;y<len;y++){
if(mx[x]>=my[y]){
min=my[y];
}else{
min=mx[x];
}
if(min>grid[x][y]) count+=min-grid[x][y];
}
}
return count;
}
}
问题在于首先要算出他的天际线,其实就是看这个二维数组在xy方向上的最大值,然后每一个数不得大于他所在行和列的最大值,取所有数可取的最大值,最后算之后的数组相对之前增加了多少。不知道为什么官方答案中最大长度都是grid的长度,那如果只有三个数组的时候岂不是出问题了?但是运行没问题最上面的代码也可以通过,但是确实有问题。有没有人给我解释一下?
附上二维数组定义方法 https://zhidao.baidu.com/question/2119494855270780467.html