Computer >> Máy Tính >  >> Lập trình >> Python

Lật cột để có số lượng hàng bằng nhau tối đa trong Python

Giả sử chúng ta có một ma trận bao gồm các số 0 và 1, chúng ta có thể chọn bất kỳ số cột nào trong ma trận và lật mọi ô trong cột đó. chuyển đổi một ô làm thay đổi giá trị của ô đó từ 0 thành 1 hoặc từ 1 thành 0. Chúng ta phải tìm số hàng tối đa có tất cả các giá trị bằng nhau sau một số lần lật. Vì vậy, nếu ma trận giống như -

0 0 0
0 0 1
1 1 0

Đầu ra sẽ là 2. Điều này là do sau khi chuyển đổi các giá trị trong hai cột đầu tiên, hai hàng cuối cùng có giá trị bằng nhau.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • x:=ma trận, m:=số hàng và n:=số cột và r:=0
  • cho mỗi phần tử i trong x
    • c:=0
    • a:=danh sách cho tất cả các phần tử l trong i, chèn l XOR i
    • cho mỗi phần tử j trong x
      • nếu j =i hoặc j =a, thì tăng c lên 1
    • r:=max của c và r
  • trả về r

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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]]))

Đầu vào

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

Đầu ra

2