LeetCode 807 保持城市天际线[贪心] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 807 保持城市天际线[贪心] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
解决此类题目一定要剖析清楚题目的意思,其实就是数组中每个数所能够增加到的数是同行和同列中最大值之间的最小值,这样正好符合天际线的定义。那么我们直接一次遍历统计每行每列的最大值,最后再次遍历一遍数据,计算每个建筑物所能增加的高度即可,代码如下:

class Solution 
public:
    int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) 
        int m = grid.size(), n = grid[0].size();
        int count = 0;
        vector<int> level(m, 0);
        vector<int> vertical(n, 0);
        for(int i = 0; i < m; i ++) 
            for(int j = 0; j < n; j ++) 
                vertical[i] = max(vertical[i], grid[i][j]);
                level[j] = max(level[j], grid[i][j]);
            
        
        for(int i = 0 ; i < m; i ++) 
            for(int j = 0; j < n; j ++) 
                count += min(level[i], vertical[j]) - grid[i][j];
            
        
        return count;
    
;

以上是关于LeetCode 807 保持城市天际线[贪心] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode - 807. 保持城市天际线 - Java

解题报告Leecode 807. 保持城市天际线——Leecode每日刷题系列

解题报告Leecode 807. 保持城市天际线——Leecode每日刷题系列

LeetCode 541. 反转字符串 II / 701. 二叉搜索树中的插入操作 / 807. 保持城市天际线

算法学习807. 保持城市天际线(java / c / c++ / python / go / rust)

LeetCode_Dec_2nd_Week