Python 中翻轉列以獲得最大數量的相等行


假設我們有一個由 0 和 1 組成的矩陣,我們可以選擇矩陣中的任意數量的列,並翻轉該列中的每個單元格。轉換單元格會將該單元格的值從 0 更改為 1,或從 1 更改為 0。我們必須找到在進行一些翻轉後具有所有值相等的行的最大數量。如果矩陣如下所示:

000
001
110

輸出將為 2。這是因為在轉換前兩列中的值後,最後兩行具有相等的值。

為了解決這個問題,我們將遵循以下步驟:

  • x := 矩陣,m := 行數,n := 列數,r := 0
  • 對於每個元素 i in x
    • c := 0
    • a := 一個列表,對於所有元素 l in i,插入 l XOR i
    • 對於每個元素 j in x
      • 如果 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

更新於:2020年4月30日

瀏覽量 169 次

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.