मान लीजिए कि हमारे पास 2D बाइनरी मैट्रिक्स है। दिए गए मैट्रिक्स में किसी भी पंक्ति या कॉलम के लिए हम सभी बिट्स को फ्लिप कर सकते हैं। यदि हम इनमें से किसी भी संख्या को निष्पादित कर सकते हैं, और यह कि हम प्रत्येक पंक्ति को एक द्विआधारी संख्या के रूप में मानते हैं, तो हमें सबसे बड़ा योग ज्ञात करना होगा जो इन संख्याओं से बना हो सकता है।
तो, अगर इनपुट पसंद है
0 | 1 | 0 |
0 | 0 | 1 |
तो आउटपुट 11 होगा, जैसे कि हम दोनों पंक्तियों को फ्लिप करते हैं तो हमें 101 और 110 मिलते हैं, तो योग 5 + 6 =11
हैइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- मैट्रिक्स में प्रत्येक पंक्ति r के लिए, करें
- यदि r[0] 0 के समान है, तो
- i के लिए 0 से लेकर r के आकार तक के लिए, करें
- r[i] :=-r[i] + 1
- i के लिए 0 से लेकर r के आकार तक के लिए, करें
- यदि r[0] 0 के समान है, तो
- जे के लिए श्रेणी 1 से मैट्रिक्स के कॉलम आकार में, करें
- सीएनटी:=0
- मैं श्रेणी में 0 से मैट्रिक्स की पंक्ति गणना के लिए, करते हैं
- cnt:=cnt + 1 अगर मैट्रिक्स [i, j] 1 है अन्यथा -1
- यदि cnt <0, तो
- मैं के लिए 0 से लेकर पंक्ति आकार के मैट्रिक्स के लिए, करते हैं
- मैट्रिक्स[i, j] :=-matrix[i, j] + 1
- मैं के लिए 0 से लेकर पंक्ति आकार के मैट्रिक्स के लिए, करते हैं
- उत्तर:=0
- मैट्रिक्स में प्रत्येक पंक्ति r के लिए, करें
- a :=0
- आर में प्रत्येक वी के लिए, करें
- a :=2 * a + v
- उत्तर:=उत्तर + ए
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def solve(self, matrix): for r in matrix: if r[0] == 0: for i in range(len(r)): r[i] = -r[i] + 1 for j in range(1, len(matrix[0])): cnt = 0 for i in range(len(matrix)): cnt += 1 if matrix[i][j] else -1 if cnt < 0: for i in range(len(matrix)): matrix[i][j] = -matrix[i][j] + 1 ans = 0 for r in matrix: a = 0 for v in r: a = 2 * a + v ans += a return ans ob = Solution() matrix = [ [0, 1, 0], [0, 0, 1] ] print(ob.solve(matrix))
इनपुट
[[0, 1, 0],[0, 0, 1]]
आउटपुट
11