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

โปรแกรมค้นหาเมทริกซ์สำหรับความสูงของคอนโดมิเนียมที่เพิ่มขึ้นเป็นสูงสุดที่เป็นไปได้ใน Python

สมมติว่าเรามีเมทริกซ์ 2 มิติ ซึ่ง matrix[r][c] แสดงความสูงของคอนโดมิเนียมในเมือง สไลน์ทิศตะวันตก-ตะวันออก (west-east skyline) มองเห็นได้โดยการหาค่าสูงสุดของแต่ละแถว ส่วนสไลน์ทิศเหนือ-ใต้ (north-south skyline) มองเห็นได้โดยการหาค่าสูงสุดของแต่ละคอลัมน์ เราต้องหาเมทริกซ์ใหม่ที่ความสูงของแต่ละคอนโดมิเนียมถูกเพิ่มขึ้นเป็นสูงสุดที่เป็นไปได้ ในขณะที่รักษาสไลน์ทั้งสองให้คงเดิม

ตัวอย่าง

อินพุต:

[[2, 3, 4],
 [5, 6, 7],
 [8, 9, 10]]

สไลน์ทิศตะวันตก-ตะวันออกคือ [4, 7, 10] (ค่าสูงสุดแต่ละแถว) สไลน์ทิศเหนือ-ใต้คือ [8, 9, 10] (ค่าสูงสุดแต่ละคอลัมน์) เราสามารถเพิ่มค่าทุกอย่างในแถวแรกเป็น 4 และแถวที่สองเป็น 7 ได้ โดยไม่เปลี่ยนแปลงสไลน์

ขั้นตอนการแก้ปัญหา

  1. คำนวณ r = รายการค่าสูงสุดของแต่ละแถวในเมทริกซ์
  2. คำนวณ c = รายการค่าสูงสุดของแต่ละคอลัมน์ในเมทริกซ์
  3. วนลูปผ่านแต่ละเซลล์ (i, j):
    • ถ้า r[i] < c[j] ให้ตั้งค่า matrix[i][j] = r[i]
    • มิฉะนั้น ให้ตั้งค่า matrix[i][j] = c[j]
  4. คืนค่าเมทริกซ์ที่แก้ไขแล้ว

การนำไปใช้ใน Python

class Solution:
    def solve(self, matrix):
        r = [max(row) for row in matrix]
        c = [max(col) for col in zip(*matrix)]
        for i in range(len(matrix)):
            for j in range(len(matrix[i])):
                if r[i] < c[j]:
                    matrix[i][j] = r[i]
                else:
                    matrix[i][j] = c[j]
        return matrix

ob = Solution()
matrix = [
    [2, 3, 4],
    [5, 6, 7],
    [8, 9, 10]
]
print(ob.solve(matrix))

อินพุต

[[2, 3, 4], [5, 6, 7], [8, 9, 10]]

เอาต์พุต

[[4, 4, 4], [7, 7, 7], [8, 9, 10]]