题目描述:

在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。

最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。

建筑物高度可以增加的最大总和是多少?

例子:
输入: grid = [[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
输出: 35
解释: 
The grid is:
[ [3, 0, 8, 4], 
  [2, 4, 5, 7],
  [9, 2, 6, 3],
  [0, 3, 1, 0] ]

从数组竖直方向(即顶部,底部)看“天际线”是:[9, 4, 8, 7]
从水平水平方向(即左侧,右侧)看“天际线”是:[8, 7, 9, 3]

在不影响天际线的情况下对建筑物进行增高后,新数组如下:

gridNew = [ [8, 4, 8, 7],
                   [7, 4, 7, 7],
                   [9, 4, 8, 7],
                   [3, 3, 3, 3] ]
说明:

1 < grid.length = grid[0].length <= 50。
 grid[i][j] 的高度范围是: [0, 100]。
一座建筑物占据一个grid[i][j]:换言之,它们是 1 x 1 x grid[i][j] 的长方体。

解题思路

1.找到二维数组每行每列的最大值(城市天际线)。

2.用较小的天际线减去当前建筑物高度,就是可以增加的高度,然后累加。

解题代码(c++)

class Solution {
public:int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {int n = grid.size();vector<int> rowMax(n);vector<int> colMax(n);for(int i = 0 ; i < n;i++){for(int j = 0 ; j < n;j++){rowMax[i] = max(rowMax[i],grid[i][j]);colMax[j] = max(colMax[j],grid[i][j]);}}int ans = 0;for(int i = 0 ; i < n;i++){for(int j = 0 ; j < n;j++){ans += min(rowMax[i],colMax[j])-grid[i][j];}}return ans;}
};

刷题 保持城市天际线相关推荐

  1. 【LeetCode】每日一题——保持城市天际线

    目录 题目 一起来读题目 主要思路: 代码实现 写法一: 代码解读 结果: 写法二:列表推导式写法 参考文章: 题目 哈哈是不是看懵了啊,俗话说的好:不会写的题目,好好读多几次题目 读不懂,没关系,我 ...

  2. 每日一题206—保持城市天际线

    给你一座由 n x n 个街区组成的城市,每个街区都包含一座立方体建筑.给你一个下标从 0 开始的 n x n 整数矩阵 grid ,其中 grid[r][c] 表示坐落于 r 行 c 列的建筑物的 ...

  3. C#LeetCode刷题-线段树

    线段树篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 493 翻转对 ...

  4. C#LeetCode刷题-树状数组

    树状数组篇 # 题名 刷题 通过率 难度 218 天际线问题 32.7% 困难 307 区域和检索 - 数组可修改 42.3% 中等 315 计算右侧小于当前元素的个数 31.9% 困难 493 翻转 ...

  5. C#LeetCode刷题-堆

    堆篇 # 题名 刷题 通过率 难度 23 合并K个排序链表 39.4% 困难 215 数组中的第K个最大元素 51.5% 中等 218 天际线问题 32.9% 困难 239 滑动窗口最大值 37.1% ...

  6. C#LeetCode刷题-分治算法

    分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  7. 基于mybatis-jsp-bootstrap-servlet-mysql-maven的Javaweb课程设计--刷题后台管理系统(考试题目管理系统)

    第一章 需求分析 计算机技术没有应用到考试上时,组织一次考试只是要经过五步:人工出题,考生考试,人工阅卷,成绩评估和试卷分析,这是一项十分繁琐和容易出错的工作,教师的工作量非常的大.很明显,传统的考试 ...

  8. 【力扣时间】【807】【中等】保持城市天际线

    保持城市天际线 1.先看题 2.审题 3.思路 4.开工! 5.解读 6.提交 7.咀嚼 8.他人的智慧 9.总结 城市天际线? 1.先看题 点我看题 题目的表述并不清楚,而且已经开始铺陷阱了.所要求 ...

  9. LeetCode刷题之1436. 旅行终点站

    LeetCode刷题之1436. 旅行终点站 我不知道将去向何方,但我已在路上! 时光匆匆,虽未曾谋面,却相遇于斯,实在是莫大的缘分,感谢您的到访 ! 题目: 给你一份旅游线路图,该线路图中的旅行线路 ...

最新文章

  1. python获取ftp所有文件名_在Python中获取最新的FTP文件夹名称
  2. opencv 标记有数字的区域
  3. hashcode()和hash()
  4. 究竟是“二O一六年”还是“二零一六年”?嘴上会说可你会写吗?
  5. python字符串startswith_Python 字符串 startswith() 使用方法及示例
  6. 浏览器从输入URL到页面渲染过程 —— 浏览器的进程与线程
  7. linux中查看mysql版本的方法汇总
  8. Unity3D之UGUI基础6:Slider滑条
  9. 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的
  10. Jquery Sparklines ref
  11. 制作chrome插件
  12. 牛逼神器第三弹--nth_element函数
  13. LIN总线协议详解4(进度表)
  14. 肌酸报告:17个肌酸使用常见问题解答
  15. python 重定向 网址错_Python URL重定向问题
  16. Qpython SL4A服务调用GPS定位获取获取位置信息
  17. python代码混淆工具,Python版代码混淆工具
  18. 物联卡是正规卡还是漏洞卡?一篇最简单明了的解释!
  19. 电脑系统怎么重装?保姆级Windows 8系统安装教程
  20. 【JVM】8_对象优先在Eden分配

热门文章

  1. MFC用ODBC连接db2数据库
  2. 第4节:Java 修饰符、Java 运算符、Circle 【多测师_王sir】
  3. 关闭贱贱的window10的自动更新系统
  4. 网件 ip 冲突 vpn_【干货三十一节】数通IP课堂笔记第十五弹,人生贵在行动!...
  5. html修改鼠标右键,怎么更改鼠标右键的菜单
  6. Java学习笔记之——Java介绍
  7. 飞机小游戏 java源码下载
  8. RTP 与 RTCP 协议
  9. Pyecharts Geo创建中国可视化地图
  10. Springboot环境下配置Sentinel,然后还报错了!!!爆红XXXXX