
解题思路
某位置所能加到的最大值是所在行的最大值和列的最大值的较小值
1、找出每一行和每一列的最大值
2、每一个位置累加
代码
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int n=grid[0].size();
//第一行存放行的最大值,第二行存放列的最大值
vector<vector<int>>grid_max(2,vector<int>(n));
//找到行和列的最大值
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
grid_max[0][i]=max(grid_max[0][i],grid[i][j]);
grid_max[1][j]=max(grid_max[1][j],grid[i][j]);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
ans+=min(grid_max[0][i],grid_max[1][j])-grid[i][j];
}
}
return ans;
}
};
//某一个元素能增加到的值是行列最大值中的较小值
本文介绍了解题思路,通过遍历二维矩阵,找出每个位置能增加的最大值,即该位置所在行的最大值和列的最大值的较小值。代码实例展示了如何使用 C++ 实现解决方案,适用于解决与城市天际线问题相关的最优化问题。
1331

被折叠的 条评论
为什么被折叠?



