Python程序:如何找到每个公寓楼高度增加到最大可能高度的矩阵?


假设我们有一个二维矩阵,其中 matrix[r, c] 表示城市中某栋公寓楼的高度。东西方向的天际线可以通过获取矩阵中每一行的最大值来确定。南北方向的天际线可以通过获取每一列的最大值来确定。我们需要找到一个新的矩阵,其中每栋公寓楼的高度都增加到最大可能高度,同时保持东西和南北方向的天际线不变。

例如,如果输入如下:

234
567
8910


444
777
8910

因为东西方向的天际线是 [4, 7, 10],南北方向的天际线是 [8, 9, 10]。我们可以将第一行中的所有值都增加到 4,将第二行中的所有值都增加到 7,而不会改变天际线。

为了解决这个问题,我们将遵循以下步骤:

  • r := 矩阵中每一行的最大值列表

  • c := 矩阵中每一列的最大值列表

  • 对于范围从 0 到矩阵行数的 i:

    • 对于范围从 0 到矩阵列数的 j:

      • 如果 r[i] < c[j],则

        • matrix[i, j] := r[i]

      • 否则,

        • matrix[i, j] := c[j]

  • 返回 matrix

让我们看下面的实现来更好地理解。

示例

 在线演示

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]]

更新于: 2020年11月10日

209 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.