📅  最后修改于: 2023-12-03 15:12:44.317000             🧑  作者: Mango
给定一个M x N的0/1矩阵A,可以执行以下操作:
要求:计算使用上述操作,使矩阵的每一行均相等所需的最小操作次数。若不能通过操作使得每一行相等,则返回-1。
输入:
3 3
1 0 0
1 0 0
1 1 1
输出:
1
python 代码如下:
def minOps(arr):
n, m = len(arr), len(arr[0])
if n == 0 or m == 0:
return 0
# 核心操作:枚举第一行,得到序列后判断
seq = [arr[0][j] ^ arr[i][j] for j in range(m)]
# 如果B的每一行仅和A的第一行不同,则假设第i个数为1,统计c。
c = 0
for i in range(1, n):
cur = [arr[0][j] ^ arr[i][j] for j in range(m)]
if cur != seq:
cur = [1 - cur[j] for j in range(m)]
if cur != seq:
return -1
c += 1
else:
c += 1
return min(c, m - c)
arr = [[1, 0, 0], [1, 0, 0], [1, 1, 1]]
print(minOps(arr)) # 1