题目描述:
We have a two dimensional matrix A where each value is 0 or 1.
A move consists of choosing any row or column, and toggling each value in that row or column: changing all 0s to 1s, and all 1s to 0s.
After making any number of moves, every row of this matrix is interpreted as a binary number, and the score of the matrix is the sum of these numbers.
Return the highest possible score.
Example 1:
Input: [[0,0,1,1],[1,0,1,0],[1,1,0,0]] Output: 39 Explanation: Toggled to [[1,1,1,1],[1,0,0,1],[1,1,1,1]]. 0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39
Note:
1 <= A.length <= 201 <= A[0].length <= 20A[i][j]is0or1.
class Solution {
public:
int matrixScore(vector<vector<int>>& A) {
int m=A.size(), n=A[0].size();
// 每一行的最高位一定要设置成1
int result=m*(1<<(n-1));
for(int j=1;j<n;j++)
{
int count=0;
// 翻转完每一行之后,再翻转每一列,将当前元素和最高位比较
// 如果相同的话,说明这一行翻转后当前元素也是1,否则是0
// 统计当前列一共有多少个1和0,那么选个数较大的一组设定为1
for(int i=0;i<m;i++)
if(A[i][j]==A[i][0]) count++;
result+=max(count,m-count)*(1<<(n-j-1));
}
return result;
}
};
本文探讨了如何通过切换矩阵的行和列来最大化矩阵的分数,解释了一种高效的算法实现,该算法能够确保每行的最高位为1,并通过统计各列中1的数量来进一步优化矩阵的总分数。
419

被折叠的 条评论
为什么被折叠?



