解题思路
个人感觉算是简单题,主要是要读懂题意;
首先要理解城市天际线的概念,天际线实际上就是每行每列中绝对最高的楼层。会根据角度的变化而改变,这边只有4个角度。
由题意可知,楼层增高后,不管哪个角度看,天际线都和原来保持一致。
其实一个元素需要考虑的就两个方向的视角,比如以第一个元素grid[0][0]为例;
从右往左看,天际线是行里最大的元素,这时候可以增长的层数就是最大元素-此元素楼高记作L1
从上往下看,天际线是列里最大的元素,同理可得L2;
由于不能改变天际线,所以这个增长楼层数应该是取这L1和L2中的最小值。
代码实现如下:
代码
class Solution {
public:
int maxIncreaseKeepingSkyline(vector<vector<int>>& grid)
{
int iSize = grid[0