最大增加量以保持Python的城市天际线
假设我们有一个称为grid的二维数组,其中grid[i][j]的每个值代表位于其中的建筑物的高度。我们可以增加任意数量的建筑物的高度。高度0也被视为建筑物。最后,从网格的所有四个方向查看时,“天际线”必须与原始网格的天际线相同。因为从远处看,城市的天际线是所有建筑物形成的矩形的外部轮廓。因此,我们必须找到可以增加建筑物高度的最大总和。
所以,如果输入像
那么输出将为35,这是因为从顶部或底部观看的天际线为:[9、4、8、7],从左侧或右侧观看的天际线为:[8、7、9、3],因此最终矩阵可以像-
为了解决这个问题,我们将遵循以下步骤-
max_row_wise:=一个新列表
max_column_wise:=一个新列表
计数器:=0
对于网格中的每个i
在max_row_wise的末尾插入i的最大值
计数器:=计数器+1
计数器:=0,i:=0,j:=0
temp_list:=一个新列表
无限执行以下操作-
i:=0,j:=j+1
在max_column_wise的末尾插入temp_list的最大值
计数器:=计数器+1
temp_list:=一个新列表
在max_column_wise的末尾插入temp_list的最大值
从循环中出来
将grid[i,j]插入temp_list
我:=我+1
如果j与grid[0]-1的大小相同且i>=len(grid),则
否则,当i>=grid的大小时,则
top_bottom,left_right:=max_row_wise,max_column_wise
i,j,值:=0,0,0
无限执行以下操作
我:=我+1
j:=0
从循环中出来
temp:=[top_bottom[i],left_right[j]]的最小值
j:=j+1
如果j与网格的列长相同,而i与网格-1的行数相同,则
否则,当j与网格列的大小相同时,则
返回值
例
让我们看下面的实现以更好地理解-
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