题目链接:https://leetcode.com/problems/max-increase-to-keep-city-skyline/description/
题目解析:的做法,找到Column和Row中的最大值,然后sum加上当前位置横纵数值的min与当前高度之差即可。
有个小优化是,在循环里面同时找出横纵的最大值,可以减少数组读取。
代码如下:0ms Accepted
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {
int maxColumn = grid.size(), maxRow = grid[0].size();
int maxInColumn[maxColumn] = {0}, maxInRow[maxRow] = {0};
for (int i = 0; i < maxColumn; i++)
{
int max = 0, max1 = 0;
for (int j = 0; j < maxRow; j++)
{
if (grid[i][j] > max)
max = grid[i][j];
if (grid[j][i] > max1)
max1 = grid[j][i];
}
maxInColumn[i] = max;
maxInRow[i] = max1;
}
int sum = 0;
for (int i = 0; i < maxColumn; i++)
for (int j = 0; j < maxRow; j++)
sum += min(maxInColumn[i], maxInRow[j]) - grid[i][j];
return sum;
}
};
static const auto ____ = [] () {
ios::sync_with_stdio(false);
cin.tie(nullptr);
return nullptr;
}();
本文解析了LeetCode上的一道题目,关于如何在保持城市天际线不变的情况下,计算能够增加的建筑高度总和。通过寻找每行每列的最大值,并计算最小值与当前高度之差,实现了0ms的高效解决方案。

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



