在 Python 中翻转列以获得最大数量的相等行

pythonserver side programmingprogramming更新于 2023/10/5 8:13:00

假设我们有一个由 0 和 1 组成的矩阵,我们可以选择矩阵中的任意数量的列并翻转该列中的每个单元格。转换单元格会将该单元格的值从 0 更改为 1 或从 1 更改为 0。我们必须找到经过一定次数的翻转后所有值都相等的最大行数。因此,如果矩阵类似于 −

000
001
110

输出将为 2。这是因为在转换前两列的值后,后两行的值相等。

为了解决这个问题,我们将遵循以下步骤 −

  • x := 矩阵,m := 行数和 n := 列数和 r := 0
  • 对于 x 中的每个元素 i
    • c := 0
    • a := a 列表,对于 i 中的所有元素 l,插入 l XOR i
    • 对于 x 中的每个元素 j
      • 如果 j = i 或 j = a,则将 c 增加 1
    • r := c 和 r 的最大值
  • 返回 r

让我们看看下面的实现以便更好地理解 −

示例

class Solution(object):
   def maxEqualRowsAfterFlips(self, matrix):
      x = matrix
      m = len(matrix)
      n = len(matrix[0] )
      r =0
      for i in x:
         c=0
         a=[l ^ 1 for l in i]
         for j in x:
            if j== i or j ==a:
               c+=1
         r=max(c, r)
      return r
ob = Solution()
print(ob.maxEqualRowsAfterFlips([[0,0,0],[0,0,1],[1,1,0]]))

输入

[[0,0,0],[0,0,1],[1,1,0]]

输出

2

相关文章