LeetCode 807. 保持城市天际线
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 807. 保持城市天际线
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1. 題目
- 2. 解題
1. 題目
在二維數組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] 的長方體。來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/max-increase-to-keep-city-skyline
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution { public:int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) {if(grid.empty())return 0;int sum1 = 0, sum2 = 0, i, j, maxh;int v[grid.size()], h[grid[0].size()];//兩方向的最大高度for(i = 0; i < grid.size(); ++i){maxh = -1;for(j = 0; j < grid.size(); ++j){sum1 += grid[i][j];if(grid[i][j] > maxh)maxh = grid[i][j];}v[i] = maxh;}for(j = 0; j < grid.size(); ++j){maxh = -1;for(i = 0; i < grid.size(); ++i){if(grid[i][j] > maxh)maxh = grid[i][j];}h[j] = maxh;}for(i = 0; i < grid.size(); ++i){for(j = 0; j < grid.size(); ++j){grid[i][j] = min(v[i],h[j]);//取兩個方向的較小的為上限sum2 += grid[i][j];}}return sum2-sum1;} };總結
以上是生活随笔為你收集整理的LeetCode 807. 保持城市天际线的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: poj 1250 解题(链表法)
- 下一篇: LeetCode 998. 最大二叉树