領扣題號807 城市天際線

2021-08-30 15:23:46 字數 1444 閱讀 4404

題目詳情

在二維陣列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.遍歷grid,同時分別將豎直最大值和水平最大值儲存在步驟1建立的集合中.同時求出二維陣列的元素和before.

3.再次遍歷grid,邏輯判斷部分為:元素位置的水平方向和豎直方向的最大值,取其中較小的最大值為該元素的值,同時累加元素和after.

4.返回after-before。

**實現

class

solution807

if(grid[j]

[i]> m)

} line.

add(max)

; high.

add(m);}

步驟3:再次遍歷grid,邏輯判斷部分為:元素位置的水平方向和豎直方向的最大值,取其中較小的最大值為該元素的值,同時累加元素和after.

int after =0;

for(int i =

0; i < grid.length; i++)}

步驟4:返回after-before。

return after - before;

}

leetcode807 保持城市天際線

在二維陣列grid中,grid i j 代表位於某處的建築物的高度。我們被允許增加任何數量 不同建築物的數量可能不同 的建築物的高度。高度 0 也被認為是建築物。最後,從新陣列的所有四個方向 即頂部,底部,左側和右側 的 天際線 必須與原始陣列的天際線相同。城市的天際線是從遠處 時,由所有建築物形成...

保持城市天際線 leetcode807

leetcode807 保持城市天際線 即增加陣列中的值,增加後4個行最大值和4個列最大值保持不變即可,求最大增加數量 思路 當增加某一元素的值時,先判斷它是否是行或者列的最大值,如果是,跳過 如果不是,找到它所在行列的最大值,令該元素值 min,遍歷陣列,找打行列最大值,儲存在新的陣列中 遍歷陣列...

leetcode 807 保持城市天際線

在二維陣列grid中,grid i j 代表位於某處的建築物的高度。我們被允許增加任何數量 不同建築物的數量可能不同 的建築物的高度。高度 0 也被認為是建築物。最後,從新陣列的所有四個方向 即頂部,底部,左側和右側 的 天際線 必須與原始陣列的天際線相同。城市的天際線是從遠處 時,由所有建築物形成...