檢查是否可以透過僅交換 Python 中對應值來使兩個矩陣嚴格遞增
假設我們有兩個名為 mat1 和 mat2 的 n x m 大小的矩陣。我們必須檢查這兩個矩陣是否透過僅交換兩個不同矩陣中的元素(僅當它們都在 (i, j) 位置時)來嚴格遞增。
因此,如果輸入如下所示:
| 7 | 1 5 |
| 1 6 | 1 0 |
| 1 4 | 9 |
| 8 | 1 7 |
則輸出為 True,因為我們可以交換 (7, 14) 和 (10, 17) 對以使它們嚴格遞增。
| 1 4 | 1 5 |
| 1 6 | 1 7 |
| 7 | 9 |
| 8 | 1 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]
- 如果 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
- 如果 mat1[i, j] >= mat1[i, j + 1] 或 mat2[i, j] >= mat2[i, j + 1],則
- 對於 j 從 0 到 col-2,執行:
- 對於 i 從 0 到 row-2,執行:
- 對於 j 從 0 到 col - 1,執行:
- 如果 mat1[i, j] >= mat1[i + 1, j] 或 mat2[i, j] >= mat2[i + 1, j],則
- 返回 False
- 如果 mat1[i, j] >= mat1[i + 1, j] 或 mat2[i, j] >= mat2[i + 1, j],則
- 對於 j 從 0 到 col - 1,執行:
- 對於 j 從 0 到 col - 1,執行:
- 返回 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP