假设我们有一个2D矩阵,其中矩阵[r,c]代表城市中公寓的高度。通过采用矩阵中每一行的最大值,可以看到东西向的天际线。取每一列的最大值,可以看到南北天际线。我们必须找到一个新的矩阵,其中每个公寓的高度都增加到最大可能的高度,同时保持相同的东西向和南北向天际线。
所以,如果输入像
2 | 3 | 4 |
5 | 6 | 7 |
8 | 9 | 10 |
4 | 4 | 4 |
7 | 7 | 7 |
8 | 9 | 10 |
因为东西方的天际线是[4,7,10],而南北的天际线是[8,9,10]。我们可以在不更改天际线的情况下将第一行中的所有内容增加到值4,将第二行中的所有内容增加到值7。
为了解决这个问题,我们将按照以下步骤操作:
r:=矩阵中每一行的最大值列表
c:=矩阵中每一列的最大值列表
对于范围在0到矩阵行数的i,执行
如果r [i] <c [j],则
除此以外,
矩阵[i,j]:= r [i]
矩阵[i,j]:= c [j]
对于范围从0到矩阵的列数的j,执行
返回矩阵
让我们看下面的实现以更好地理解:
class Solution: def solve(self, matrix): r = [max(i) for i in matrix] c = [max(i) for i in zip(*matrix)] for i in range(len(matrix)): for j in range(len(matrix[i])): if r[i] < c[j]: matrix[i][j] = r[i] else: matrix[i][j] = c[j] return matrix ob = Solution()matrix = [ [2, 3, 4], [5, 6, 7], [8, 9, 10] ] print(ob.solve(matrix))
[[2, 3, 4], [5, 6, 7], [8, 9, 10]]
输出结果
[[4, 4, 4], [7, 7, 7], [8, 9, 10]]