861. 翻转矩阵后的得分
有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。
在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。
返回尽可能高的分数。
思路:贪心思想,分两步
①:利用行翻转保证每行的首个数字为1
②:利用列翻转(从第二列开始)保证每列的1比0多
时间复杂度O(mn)
空间复杂度O(1)
class Solution:
def matrixScore(self, A: List[List[int]]) -> int:
n,m = len(A),len(A[0])
for i in range(n):
if A[i][0]^1:
for j in range(m):
A[i][j] ^= 1
ans = n
for j in range(1,m):
stand = 0
for i in range(n):
if A[i][j] ^ 0:
stand += 1
stand = max(n-stand,stand)
ans = (ans<<1)+stand
return ans