目录
题目描述
一、审题
题目看似很难,其实认真多读几遍就能懂,以下是我对题目的理解。
二、代码和解释
1.代码
int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize){
int min,rowmax,colmax;
int addsize;
int n = *gridColSize;
int sum = 0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++){
rowmax = grid[i][j];
colmax = grid[i][j];
for(int x=0;x<n;x++){
if(rowmax<grid[i][x])
rowmax = grid[i][x];//找到grid[i][j]所在的行的最大值
}
for(int y=0;y<n;y++){
if(colmax<grid[y][j])
colmax = grid[y][j];//找到grid[i][j]所在的列的最小值
}
if(colmax>=rowmax)//找到能增高的极限,就是在rowmax和colmax找到最小值
min = rowmax;
else
min = colmax;
addsize = min - grid[i][j];//计算能增高的层数
sum = sum + addsize;
}
}
return sum;
}
2.解释
定义rowmax和colmax,之后用循环语句找到行和列的最大值,然后比较rowmax和colmax之中谁最小,找到能增加层数的极限min,最后用min减去原层数就能得到增加层数且不会改变天际线的最大值。函数的返回值为所有建筑物增加层数的总和sum
总结
耐心审题,看似长串其实很简单(大概qwq)