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

โปรแกรมหาพื้นที่ของกำลังสองที่ใหญ่ที่สุดของ 1s ในเมทริกซ์ที่กำหนดใน python


สมมติว่าเรามีเมทริกซ์ไบนารี เราต้องหากำลังสองที่ใหญ่ที่สุดของ 1 ในเมทริกซ์ที่ให้มา

ดังนั้นหากอินพุตเป็นแบบ

1
0
0
0
0
1
1
0
0
0
0
0
1
1
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0
0
1
1
1
1
0
0

แล้วผลลัพธ์จะเป็น 16

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • res :=0
  • สำหรับ i ในช่วง 0 ถึงขนาดของเมทริกซ์ ทำ
    • res :=สูงสุดของความละเอียดและเมทริกซ์[i, 0]
  • สำหรับฉันในช่วง 0 ถึงขนาดของเมทริกซ์[0] ทำ
    • res :=สูงสุดของ res และ matrix[0, i]
  • สำหรับ i ในช่วง 1 ถึงแถวนับของเมทริกซ์ ทำ
    • สำหรับ j ในช่วง 1 ถึงจำนวนคอลัมน์ของเมทริกซ์ ให้ทำ
      • ถ้า matrix[i, j] เหมือนกับ 1 แล้ว
        • เมทริกซ์[i, j] =ค่าต่ำสุดของ (เมทริกซ์[i - 1, j], เมทริกซ์[i - 1, j - 1] และเมทริกซ์[i, j - 1]) + 1
      • res =สูงสุดของความละเอียดและเมทริกซ์[i, j]
  • ผลตอบแทน^2

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

ตัวอย่าง

คลาสโซลูชัน:def แก้ปัญหา(ตัวเอง, เมทริกซ์):res =0 สำหรับฉันในช่วง (len(เมทริกซ์)):res =max(res, matrix[i][0]) สำหรับฉันในช่วง (len (เมทริกซ์) [0])):res =max(res, matrix[0][i]) for i in range(1, len(matrix)):for j in range(1, len(matrix[0])):if เมทริกซ์[i][j] ==1:เมทริกซ์[i][j] =นาที(เมทริกซ์[i - 1][j] เมทริกซ์[i - 1][j - 1] เมทริกซ์[i][j - 1]) + 1 res =max(res, matrix[i][j]) return res * resob =Solution()matrix =[ [1, 0, 0, 0, 0, 1, 1], [0, 0 , 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1 , 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0]]print(ob.solve(เมทริกซ์))

อินพุต

<พรี>เมทริกซ์ =[ [1, 0, 0, 0, 0, 1, 1], [0, 0, 0, 0, 0, 1, 1], [0, 1, 1, 1, 1, 0 , 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 0, 0 ] ]

ผลลัพธ์

16