此题简单,so easy.属于一眼看到解法的那种,只需要取出各行各列的最大值,然后对每个位置取这两个最大值的最小值减去位置上的值相加就好,这样就不会改变skyline。此题我的解法遍历了三次list,可能有更精简的算法,但是我觉得复杂度最少就为O(mn)。就不去再想了。附代码。PS:最近因为读研,在用python做machine learning,所以代码由C++改到python。
class Solution:
def maxIncreaseKeepingSkyline(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
column = []
row = []
for i in range(len(grid)):
row_max = grid[i][0]
for j in range(len(grid[0])):
if grid[i][j] > row_max:
row_max = grid[i][j]
row.append(row_max)
for j in range(len(grid[0])):
column_max = grid[0][j]
for i in range(len(grid)):
if grid[i][j] > column_max:
column_max = grid[i][j]
column.append(column_max)
result = 0
for i in range(len(grid)):
for j in range(len(grid[0])):
value = min(row[i],column[j])
result += value-grid[i][j]
return result