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;
    }
};
相关推荐
东京老树根1 分钟前
SAP学习笔记 - 开发06 - CDSView + Fiori Element 之 List Report
笔记·学习
Dovir多多7 分钟前
渗透测试入门学习——php表单form与POST、GET请求练习
学习·安全·web安全·网络安全·系统安全·php·xss
redcocal12 分钟前
地平线内推码 kbrfck
c++·嵌入式硬件·mcu·算法·fpga开发·求职招聘
冷眼看人间恩怨38 分钟前
【话题讨论】AI时代程序员核心力:技术深耕,跨界学习,软硬兼备
人工智能·学习·aigc
.普通人1 小时前
c语言--力扣简单题目(链表的中间节点)讲解
c语言·leetcode·链表
西农小陈1 小时前
python-字符排列问题
数据结构·python·算法
小黄酥1 小时前
Python学习笔记--模块
笔记·python·学习
TechQuester2 小时前
OpenAI 刚刚推出 o1 大模型!!突破LLM极限
人工智能·python·gpt·算法·chatgpt
__AtYou__2 小时前
Golang | Leetcode Golang题解之第412题Fizz Buzz
leetcode·golang·题解
wangduqiang7472 小时前
unity的学习
学习·unity·游戏引擎