สมมติว่าเรามีเมทริกซ์ 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 ได้ โดยไม่เปลี่ยนแปลงสไลน์
ขั้นตอนการแก้ปัญหา
- คำนวณ
r= รายการค่าสูงสุดของแต่ละแถวในเมทริกซ์ - คำนวณ
c= รายการค่าสูงสุดของแต่ละคอลัมน์ในเมทริกซ์ - วนลูปผ่านแต่ละเซลล์
(i, j):- ถ้า
r[i] < c[j]ให้ตั้งค่าmatrix[i][j] = r[i] - มิฉะนั้น ให้ตั้งค่า
matrix[i][j] = c[j]
- ถ้า
- คืนค่าเมทริกซ์ที่แก้ไขแล้ว
การนำไปใช้ใน 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]]