leecode-861.翻转矩阵后的得分
程序员文章站
2022-07-12 12:18:04
...
题目
思路分析
因为本题是按照行或者列进行翻转,所以我们先分析行。
- 对于行的数据来说,为了使得最后的结果最大,那么我们得保证高位的数据尽可能多的是1.也就是,如果发现某一行开头不是1的时候,就先翻转此行。
- 对于列来说,因为对于第j列来说,其对结果的贡献值是非零值的个数*(1<<(col-1-j))。
代码
class Solution {
public:
int maxSum;
//获取每一行数据代表的数值
inline int getSum(vector<int>& A){
int n = A.size(), ans = 0;
//是否进行翻转
bool flag = (A[0] == 0) ? true : false;
for(int i = 0; i < n;i++){
if(flag) A[i] = !A[i];
if(A[i] == 1)
ans += (1 << (n - 1 - i));
}
return ans;
}
int matrixScore(vector<vector<int>>& A) {
int r = A.size(), c = A[0].size(), ans = 0;
maxSum = (1 << r) - 1;
for(int i = 0; i < r;i++) ans += getSum(A[i]);
for(int j = 0;j < c;j++){
int s = 0;
for(int i = 0;i < r;i++) s += A[i][j];
//如果此时的0的数值多余1的数值,进行翻转
if(2 * s < r) ans += (r - 2 * s) * (1 << (c - 1 - j));
}
return ans;
}
};
推荐阅读
-
python 实现矩阵上下/左右翻转,转置的示例
-
在程序大奖赛中,有10个评委为参赛的选手打分,分数为1~100分。选手最后得分为:去掉一个最高分和一个最低分后其余8个分数的平均值。
-
编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值是value的二进制位模式从左到右翻转后的值。 如: 在32位机器上2
-
:unsigned int reverse_bit(unsigned int value); //这个函数的返回值value的二进制位模式从左到右翻转后的值
-
编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上25这
-
.编写函数: unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。 如: 在32位机器上2
-
C语言——编写函数:unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值
-
编写函数:(不使用位操作符) unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
-
unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。
-
unsigned int reverse_bit(unsigned int value); 这个函数的返回值value的二进制位模式从左到右翻转后的值。