मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है। हम पहले जितनी बार चाहें कॉलम को पुनर्व्यवस्थित कर सकते हैं, फिर केवल 1s वाले सबसे बड़े सबमैट्रिक्स का क्षेत्रफल लौटाएं।
उदाहरण के लिए, यदि इनपुट है:
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| 1 | 0 | 1 |
तो आउटपुट 4 होगा, क्योंकि हम इसे इस तरह व्यवस्थित कर सकते हैं:
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| 1 | 1 | 0 |
एल्गोरिदम
n:= मैट्रिक्स की पंक्ति संख्याm:= मैट्रिक्स की कॉलम संख्याans := 0- प्रत्येक पंक्ति
iके लिए 1 सेn-1तक:- प्रत्येक कॉलम
jके लिए 0 सेm-1तक:- यदि
matrix[i][j] == 1, तोmatrix[i][j] += matrix[i-1][j]
- यदि
- प्रत्येक कॉलम
- प्रत्येक पंक्ति के लिए मैट्रिक्स में:
- पंक्ति को सॉर्ट करें
jके लिएm-1से 0 तक घटते क्रम में:ans = max(ans, row[j] * (m - j))
ansलौटाएं
उदाहरण कार्यान्वयन
def solve(matrix):
n, m = len(matrix), len(matrix[0])
ans = 0
for i in range(1, n):
for j in range(m):
if matrix[i][j]:
matrix[i][j] += matrix[i-1][j]
for row in matrix:
row.sort()
for j in range(m-1, -1, -1):
ans = max(ans, row[j] * (m - j))
return ans
matrix = [
[1, 0, 0],
[1, 1, 1],
[1, 0, 1]
]
print(solve(matrix)) # आउटपुट: 4
इनपुट
[[1, 0, 0], [1, 1, 1], [1, 0, 1]]
आउटपुट
4