欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Leetcode 807. 保持城市天际线(学习一下求行列max值的求法即可)

Leetcode 807. 保持城市天际线(学习一下求行列max值的求法即可)

2025/10/29 16:12:55 来源:https://blog.csdn.net/zjjaibc/article/details/140414610  浏览:    关键词:Leetcode 807. 保持城市天际线(学习一下求行列max值的求法即可)

核心思想:贪心,位置i,j上的建筑能够增加到的最大高度为当前行i上最高的建筑h1,和当前列j上最高的建筑h2去一个min即可,这样就可以不会影响边际线。

打卡代码

class Solution {
public:int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {int n = grid[0].size();int N = 55;int res = 0;int col[N], row[N];// 求每一行的最大值for(int i = 0; i < n; i ++){int curmax = -1;for(int j = 0; j < n; j ++){if(grid[i][j] > curmax)curmax = grid[i][j];}row[i] = curmax;} // 求每一列的最大值for(int i = 0; i < n; i ++){int curmax = -1;for(int j = 0; j < n; j ++){if(grid[j][i] > curmax)curmax = grid[j][i];}col[i] = curmax;}// 根据col和row索引出答案for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){int t = 0;  // 当前位置需要增加的高度int curh = min(row[i], col[j]);// cout << curh << " ";t = curh - grid[i][j];res += t;}}return res;}
};

 优化一下求解每行/列求最大值的代码:

class Solution {
public:int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {int n = grid[0].size();int N = 55;int res = 0;vector<int> col(n), row(n);// 求每一行的最大值.求每一列的最大值for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){row[i] = max(row[i], grid[i][j]);col[j] = max(col[j], grid[i][j]);}} // 根据col和row索引出答案for(int i = 0; i < n; i ++){for(int j = 0; j < n; j ++){int t = 0;  // 当前位置需要增加的高度int curh = min(row[i], col[j]);t = curh - grid[i][j];res += t;}}return res;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词