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

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

打卡代码

cpp 复制代码
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;
    }
};

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

cpp 复制代码
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;
    }
};
相关推荐
小小杨树13 小时前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2121 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2121 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术1 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦1 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
用户497863050732 天前
(一)小红的数组操作
算法·编程语言
怕浪猫2 天前
Electron 系列文章封面图
算法·架构·前端框架
徐小夕2 天前
JitWord 3.0 正式发布,高精度Word异构解析+复杂组件兼容,打造web端协同Word编辑器
前端·vue.js·算法
通信小呆呆2 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人