在 Python 中最大程度增加以保留城市天际线
假设我们有一个名为 grid 的二维数组,其中 grid[i][j] 的每个值代表位于该处的建筑物的高度。我们可以将任意数量的建筑物的高度增加任意数量。高度 0 也被视为建筑物。最后,从网格的四个方向看时,"天际线"必须与原始网格的天际线相同。因为城市的天际线是从远处看时所有建筑物形成的矩形的外轮廓。因此,我们必须找到建筑物高度可以增加的最大总和。
因此,如果输入如下
| 3 | 0 | 8 | 4 |
| 2 | 4 | 5 | 7 |
| 9 | 2 | 3 | 6 |
| 0 | 3 | 1 | 0 |
则输出将为 35,这是因为天际线从顶部或底部看到的天际线是:[9, 4, 8, 7],从左侧或右侧看到的天际线是:[8, 7, 9, 3],因此最终的矩阵可以是 −
| 8 | 4 | 8 | 7 |
| 7 | 4 | 7 | |
| 9 | 4 | 8 | 7 |
| 3 | 3 | 3 |
为了解决这个问题,我们将遵循以下步骤 −
max_row_wise := 一个新列表
max_column_wise := 一个新列表
counter := 0
对于 grid 中的每个 i,执行
在 max_row_wise 的末尾插入 i 的最大值
counter := counter + 1
counter := 0, i := 0, j := 0
temp_list := a new list
无限次执行以下操作 −
将 grid[i,j] 插入 temp_list
i := i + 1
如果 j 与 grid[0] -1 的大小相同且 i>=len(grid),则
在 max_column_wise 的末尾插入 temp_list 的最大值
退出循环
否则,当 i >= 网格大小时,则
i := 0, j := j + 1
在 max_column_wise 的末尾插入 temp_list 的最大值
counter := counter + 1
temp_list:= 一个新列表
top_bottom, left_right := max_row_wise,max_column_wise
i, j, value := 0,0,0
无限次执行下列操作,执行
temp := [top_bottom[i], left_right[j]] 的最小值
j := j + 1
如果 j 与网格的列长度相同且 i 与网格的行数 -1 相同,则
退出循环
否则,当 j 与网格列的大小相同时,则
i := i+1
j := 0
返回 value
示例
让我们看下面的实现,以便更好地理解 −
class Solution: def maxIncreaseKeepingSkyline(self, grid): max_row_wise = [] max_column_wise = [] counter = 0 for i in grid: max_row_wise.append(max(i)) counter+=1 counter = 0 i = 0 j = 0 temp_list = [] while True: temp_list.append(grid[i][j]) i+=1 if j ==len(grid[0])-1 and i>=len(grid): max_column_wise.append(max(temp_list)) break elif i >= len(grid): i = 0 j = j + 1 max_column_wise.append(max(temp_list)) counter +=1 temp_list=[] top_bottom, left_right = max_row_wise,max_column_wise i, j, value = 0,0,0 while True: temp = min([top_bottom[i], left_right[j]]) value+= abs(grid[i][j] - temp) j+=1 if j == len(grid[0]) and i==len(grid)-1: break elif j == len(grid[0]): i = i+1 j = 0 return value ob = Solution() print(ob.maxIncreaseKeepingSkyline([[3,0,8,4],[2,4,5,7],[9,2,6,3],[0, 3,1,0]]))
输入
[[3,0,8,4],[2,4,5,7],[9,2,6,3],[0,3,1,0]]
输出
35
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

