分别找到所在的行和列里最大的数,然后选小的那个。
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
vector<int> topbottom;
vector<int> leftright;
int m = grid.size();
int n = grid[0].size();
topbottom.resize(m);
leftright.resize(n);
int result=0;
for (int i = 0; i < m; i++)
{
leftright[i] = grid[i][0];
for (int j = 1; j < n; j++)
if (grid[i][j] > leftright[i]) leftright[i] = grid[i][j];
}
for (int i= 0; i < n; i++)
{
topbottom[i] = grid[0][i];
for (int j = 1; j < m; j++)
if (grid[j][i] > topbottom[i]) topbottom[i] = grid[j][i];
}
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
if (leftright[i] < topbottom[j]) result = result + leftright[i] - grid[i][j];
else result = result + topbottom[j] - grid[i][j];
return result;
}
};
速度在前1%。