একটি ০ এবং ১ Từ Мат্রিক্স দেওয়া আছে। যেকোনো সংখ্যক কলাম চুজ করে সেটির সব সেল ফ্লিপ করা যায় (০ কে ১, ১ কে ০)। কিছু ফ্লিপের পর সর্বোচ্চ কতগুলো রোয়ের সব ভ্যালু সমান হবে তা বের করতে হবে।
ম্যাট্রিক্স: 0 0 0 0 0 1 1 1 0 আউটপুট ২। কারণ প্রথম দুটি কলাম ফ্লিপ করলে শেষ দুটি রোর ভ্যালু সমান হয়।
সমাধানের ধাপসমূহ
- x := matrix, m := রো সংখ্যা, n := কলাম সংখ্যা, r := 0
- x-এ প্রতিটি রো i-এর জন্য:
- c := 0
- a := i-র প্রতিটি এলিমেন্ট l-এর জন্য l XOR 1 করে লিস্ট বানান
- x-এ প্রতিটি রো j-এর জন্য:
- যদি j == i বা j == a হয়, তবে c++
- r := max(c, r)
- r রিটার্ন
উদাহরণ
class Solution(object):
def maxEqualRowsAfterFlips(self, matrix):
x = matrix
m = len(matrix)
n = len(matrix[0])
r = 0
for i in x:
c = 0
a = [l ^ 1 for l in i]
for j in x:
if j == i or j == a:
c += 1
r = max(c, r)
return r
ob = Solution()
print(ob.maxEqualRowsAfterFlips([[0,0,0],[0,0,1],[1,1,0]]))
ইনপুট
[[0,0,0],[0,0,1],[1,1,0]]
আউটপুট
2