Python程式:查詢矩陣中最大連續元素個數(其最大公約數大於1)
假設我們得到一個包含n行m列的矩陣。我們需要找到矩陣中最大數量的連續元素,這些元素的最大公約數大於1。這些連續元素可以在矩陣中水平或垂直排列。
例如,輸入:
| 3 | 7 | 9 | 12 |
| 5 | 9 | 4 | 6 |
| 7 | 8 | 5 | 10 |
如果m = 4,n = 3;則輸出為3。
給定矩陣的第四列是12, 6, 10。該列元素的最大公約數是2。由於共有三個元素,答案是3。
為了解決這個問題,我們將遵循以下步驟:
- mat := 一個新的維度為m x n x n的3維列表
- res := 0
- 對於i從0到n:
- 對於j從i到n:
- gcd_temp := 0
- x := 0
- 對於k從0到m:
- 如果i等於j,則
- mat[i, j, k] := input_list[i, k]
- 否則,
- mat[i, j, k] = mat[i, j-1, k] 和 input_list[j, k] 的最大公約數
- gcd_temp = gcd_temp 和 mat[i, j, k] 的最大公約數
- 如果 gcd_temp > 1,則
- x := x + j - i + 1
- 否則,
- res := res 和 x 的最大值
- 如果 mat[i, j, k] > 1,則
- gcd_temp := mat[i, j, k]
- x := j - i + 1
- 如果i等於j,則
- 對於j從i到n:
- res := res 和 x 的最大值
- 對於i從0到n:
- 返回 res
示例
讓我們看下面的實現來更好地理解:
from math import gcd def solve(n, m, input_list): mat = [[[0] *m] *n] *n res = 0 for i in range(n): for j in range(i, n): gcd_temp = 0 x = 0 for k in range(m): if i == j: mat[i][j][k] = input_list[i][k] else: mat[i][j][k] = gcd(mat[i][j-1][k], input_list[j][k]) gcd_temp = gcd(gcd_temp, mat[i][j][k]) if gcd_temp > 1: x += j - i + 1 else: res = max(res,x) if mat[i][j][k] > 1: gcd_temp = mat[i][j][k] x = j - i + 1 res = max(res,x) return res print(solve(3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]))
輸入
3, 4, [[3, 7, 9, 12], [5, 9, 4, 6], [7, 8, 5, 10]]
輸出
3
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP