解题思路:
该题我想到的就是用粗暴的方式
1,求出每行每列的最大值
2,取二维数组中每个位置行列的最小值,然后减去当前值就是得到的当前位置可以增加的值
3,依次累加就是题目答案
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)<(y)?(x):(y))
int maxIncreaseKeepingSkyline(int** grid, int gridSize, int* gridColSize)
{
int i,j;
int ret = 0;
int *colArr = (int*)malloc(gridSize*sizeof(int));
memset(colArr,0,gridSize);
int *rowArr = (int*)malloc(gridSize*sizeof(int));
memset(rowArr,0,gridSize);
for(i=0; i<gridSize; i++)
{
for(j=0; j<gridColSize[i]; j++)
{
colArr[i] = MAX(grid[j][i],colArr[i]);
rowArr[i] = MAX(grid[i][j],rowArr[i]);
}
printf("%d %d\n",colArr[i],rowArr[i]);
}
for(i=0; i<gridSize; i++)
{
for(j=0; j<gridColSize[i]; j++)
{
ret += MIN(colArr[j],rowArr[i]) - grid[i][j];
}
}
free(colArr);
free(rowArr);
return ret;
}
运行结果: