Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

พลิกคอลัมน์สำหรับจำนวนแถวที่เท่ากันสูงสุดใน Python


สมมติว่าเรามีเมทริกซ์ที่ประกอบด้วย 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