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