檢查是否可以透過僅交換 Python 中對應值來使兩個矩陣嚴格遞增


假設我們有兩個名為 mat1 和 mat2 的 n x m 大小的矩陣。我們必須檢查這兩個矩陣是否透過僅交換兩個不同矩陣中的元素(僅當它們都在 (i, j) 位置時)來嚴格遞增。

因此,如果輸入如下所示:

71
5
1
6
1
0


1
4
9
81
7

則輸出為 True,因為我們可以交換 (7, 14) 和 (10, 17) 對以使它們嚴格遞增。

1
4
1
5
1
6
1
7


79
81
0

為了解決這個問題,我們將遵循以下步驟:

  • row := mat1 的行數
  • col := mat1 的列數
  • 對於 i 從 0 到 row - 1,執行:
    • 對於 j 從 0 到 col - 1,執行:
      • 如果 mat1[i,j] > mat2[i,j],則
        • 交換 mat1[i, j] 和 mat2[i, j]
    • 對於 i 從 0 到 row - 1,執行:
      • 對於 j 從 0 到 col-2,執行:
        • 如果 mat1[i, j] >= mat1[i, j + 1] 或 mat2[i, j] >= mat2[i, j + 1],則
          • 返回 False
    • 對於 i 從 0 到 row-2,執行:
      • 對於 j 從 0 到 col - 1,執行:
        • 如果 mat1[i, j] >= mat1[i + 1, j] 或 mat2[i, j] >= mat2[i + 1, j],則
          • 返回 False
  • 返回 True

示例

讓我們看看下面的實現以更好地理解:

線上演示

def solve(mat1, mat2):
   row = len(mat1)
   col = len(mat1[0])
   for i in range(row):
      for j in range(col):
         if mat1[i][j] > mat2[i][j]:
            mat1[i][j], mat2[i][j]= mat2[i][j], mat1[i][j]
   for i in range(row):
      for j in range(col-1):
         if mat1[i][j]>= mat1[i][j + 1] or mat2[i][j]>= mat2[i][j + 1]:
            return False
   for i in range(row-1):
      for j in range(col):
         if mat1[i][j]>= mat1[i + 1][j] or mat2[i][j]>= mat2[i + 1][j]:
            return False
   return True
mat1 = [[7, 15],
         [16, 10]]
mat2 = [[14, 9],
         [8, 17]]
print(solve(mat1, mat2))

輸入

[[7, 15],
[16, 10]],
[[14, 9],
[8, 17]]

輸出

True

更新於:2021年1月18日

83 次瀏覽

啟動您的 職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.