สมมติว่าเรามีเมทริกซ์ไบนารี เราสามารถเลือกคอลัมน์จำนวนเท่าใดก็ได้ในเมทริกซ์ที่กำหนด และพลิกทุกเซลล์ในคอลัมน์นั้น การแปลงเซลล์หมายถึงการกลับค่าของเซลล์ เราต้องหาจำนวนแถวสูงสุดที่มีค่าทั้งหมดเท่ากันหลังจากการพลิกบางจำนวน ดังนั้นถ้าเมทริกซ์เป็นแบบนี้
0 | 0 | 0 |
0 | 0 | 1 |
1 | 1 | 0 |
ผลลัพธ์จะเป็น 2 เนื่องจากหลังจากแปลงค่าในสองคอลัมน์แรก สองแถวสุดท้ายมีค่าเท่ากัน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
-
x :=เมทริกซ์, m :=จำนวนแถว และ n :=จำนวนคอลัมน์และ r :=0
-
สำหรับแต่ละองค์ประกอบ i ใน x
-
ค :=0
-
a :=รายการองค์ประกอบทั้งหมด l ใน i แทรก l XOR i
-
สำหรับแต่ละองค์ประกอบ j ใน x
-
ถ้า j =i หรือ j =a ให้เพิ่ม c ขึ้น 1
-
-
r :=สูงสุดของ c และ r
-
-
กลับ r
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
ตัวอย่าง
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))
อินพุต
[[0,0,0], [0,0,1], [1,1,0]]
ผลลัพธ์
2