在Python中找到通过翻转每个行元素获得的最大和的程序

在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
  • 对于矩阵的列大小的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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程