在Python中找到通过翻转每个行元素获得的最大和的程序
假设我们有一个2D二进制矩阵。对于给定矩阵中的任何行或列,我们都可以翻转所有位。如果我们可以执行任意数量的这些操作,并且将每行视为二进制数,则必须找到可以从这些数字中制作的最大总和。
因此,如果输入如下所示:
0 | 1 | 0 |
---|---|---|
0 | 0 | 1 |
然后输出将为11,因为如果我们翻转两行,我们得到101和110,那么总和为5 + 6 = 11
要解决此问题,我们将执行以下步骤:
- 对于矩阵中的每个行r,请执行以下操作
- 如果r [0]与0相同,则
- 对于i在r的大小范围内,执行
- r [i]:= -r [i] + 1
- 如果r [0]与0相同,则
- 对于矩阵的列大小的j从1到循环,执行
- cnt:= 0
- 对于矩阵行数的i从0到循环,执行
- 如果matrix [i,j]为1,则cnt:= cnt + 1;否则,cnt:= cnt – 1
- 如果cnt < 0,则
- 对于矩阵行数的i从0到循环,执行
- matrix [i,j]:= -matrix [i,j] +1
- ans:= 0
- 对于矩阵中的每个行r,请执行以下操作
- a:= 0
- 对于r中的每个v,请执行以下操作
- a:= 2 * a + v
- ans:= ans + a
- 返回ans
让我们看一下以下实现,以获得更好的理解:-
更多Python相关文章,请阅读:Python 教程
示例
class Solution:
def solve(self, matrix):
for r in matrix:
if r[0] == 0:
for i in range(len(r)):
r[i] = -r[i] + 1
for j in range(1, len(matrix[0])):
cnt = 0
for i in range(len(matrix)):
cnt += 1 if matrix[i][j] else -1
if cnt < 0:
for i in range(len(matrix)):
matrix[i][j] = -matrix[i][j] + 1
ans = 0
for r in matrix:
a = 0
for v in r:
a = 2 * a + v
ans += a
return ans
ob = Solution()
matrix = [ [0, 1, 0], [0, 0, 1] ]
print(ob.solve(matrix))
输入
[[0, 1, 0],[0, 0, 1]]
输出
11