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

Chương trình tìm số cột lậ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 nhị phân, chúng ta có thể chọn bất kỳ số cột nào trong ma trận đã cho và lật mọi ô trong cột đó. chuyển đổi một ô có nghĩa là, đảo ngược giá trị ô. 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ử 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ả lại 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 solve(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()
matrix = [[0,0,0],
         [0,0,1],
         [1,1,0]]
print(ob.solve(matrix))

Đầu vào

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

Đầu ra

2