leetcode 861.翻转矩阵后的得分

news/2025/2/22 0:00:22/

leetcode 861.翻转矩阵后的得分

题目描述

有一个二维矩阵 A 其中每个元素的值为 0 或 1 。

移动是指选择任一行或列,并转换该行或列中的每一个值:将所有 0 都更改为 1,将所有 1 都更改为 0。

在做出任意次数的移动后,将该矩阵的每一行都按照二进制数来解释,矩阵的得分就是这些数字的总和。

返回尽可能高的分数。

示例:

输入:[[0,0,1,1],[1,0,1,0],[1,1,0,0]]
输出:39
解释:
转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]
0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39

提示:

  1. 1 <= A.length <= 20
  2. 1 <= A[0].length <= 20
  3. A[i] [j] 是 0 或 1

解题思路

对于反转的数组而言,每一行代表一个二进制数,假设我们只对行进行反转,那么为了可以使得二进制数最大,就要使每一行的首元素是1(首元素是1,表示 2 n − 1 2^{n-1} 2n1 ,其后面的数即使全是1,总和才等于 2 n − 1 − 1 2^{n-1}-1 2n11)所以要是得到的分最好,每一行的首元素都要变成1。行处理完了以后,看一下列,列就要使得尽可能包括多的1的个数,如果1大于列的一般,就不进行反转,否则把这一列反转,这样就可以保证没一列1的个数最多。代码如下

class Solution {
public:int matrixScore(vector<vector<int>>& A) {int row = A.size(), col = A[0].size();  // row 行, col 列// 把每一行的首元素都变成1for(int i=0; i<row; i++){// 如果是1,就不进行反转if(A[i][0] == 1){continue;}else{ // 不是1的情况,按照题意反转for(int j=0; j<col; j++){A[i][j] = (A[i][j] == 1 ? 0 : 1);}}}// 处理每一列的情况,使每一列包括尽可能多的1for(int i=1; i<col; i++){int countOne = 0;  // 记录1的个数for(int j=0; j<row; j++){if(A[j][i] == 1){countOne++;  // 统计1的个数}}// 如果1的数量比列的一半还要多,不进行反转,否则进行反转if(countOne > row/2){continue;}else{for(int j=0; j<row; j++){A[j][i] = (A[j][i] == 1 ? 0 : 1);}}}int res = score(A, row, col);  // 计算总分return res;}// 用于计算每一列数字对应的分数,并相加得到总分int score(vector<vector<int>> A, int row, int col){int res = 0;for(int i=0; i<row; i++){int temp = 0;for(int j=0; j<col; j++){temp = temp*2+A[i][j];}res += temp;}return res;}
};

欢迎大家关注我的个人公众号,同样的也是和该博客账号一样,专注分享技术问题,我们一起学习进步
在这里插入图片描述


http://www.ppmy.cn/news/675948.html

相关文章

Codeforces 861 A k-rounding 数论

题目链接&#xff1a; http://codeforces.com/contest/861/problem/A 题目描述&#xff1a; 给你一个n, 一个k, 让你求n的所有倍数至少以k个0结尾的那个数 解题思路&#xff1a; 质因数分解出2&#xff0c; 5&#xff0c; 如果min(cnt2, cnt5) > k, 直接输出&#xff0c; 剩…

AcWing 861. 二分图的最大匹配

861. 二分图的最大匹配 - AcWing题库 AcWing 861. 二分图的最大匹配 - AcWing #include<iostream> #include<cstring> using namespace std; const int N 510; const int M 1e510; int n1,n2,m; //我们用邻接表存储n1到n2的边就可以啦 int h[N],e[M],ne[M],idx…

ISE14.7中出现ERROR:Simulator:861- failed to link the design的报错解决

傲娇的ISE系统总是很针对使用win 10系统的用户&#xff0c;初次遇到这个问题分享一下解决方法&#xff01; 解决方法如下&#xff1a; 在安装目录之下找到&#xff1a;\文件包\14.7\ISE_DS\ISE\gnu\MinGW\5.0.0\nt\libexec\gcc\mingw32\3.4.2\collect2.exe,并将collect.2exe删…

ISE仿真器报错:ERROR:Simulator:861 – Failed to link the design 解决办法

记一下初次使用xilinx ISE 遇到的问题 我用的系统是win 10 Pro Version 貌似Windows 8 版本以上的系统都会出现这个问题 解决办法&#xff1a; 找到安装目录”\Xilinx\14.x\ISE_DS\ISE\gnu\MinGW\5.0.0\nt\libexec\gcc\mingw32\3.4.2\”下的 “collect2.exe”并将其删除&#…

acwing 861. 二分图的最大匹配(匈牙利算法)

给定一个二分图&#xff0c;其中左半部包含 n1 个点&#xff08;编号 1∼n1&#xff09;&#xff0c;右半部包含 n2 个点&#xff08;编号 1∼n2&#xff09;&#xff0c;二分图共包含 m 条边。 数据保证任意一条边的两个端点都不可能在同一部分中。 请你求出二分图的最大匹配…

LeetCode 861 题解

861. Score After Flipping Matrix 题目大意&#xff1a;一个矩阵由01组成&#xff0c;现在要么翻转整行要么翻转整列&#xff0c;每一行组成一个二进制的数&#xff0c;希望数字最大。 解题思路&#xff1a;首先意识到 二进制数的最高位置&#xff0c;比后面所有位都是1来的…

CF861D

题目链接&#xff1a;http://codeforces.com/contest/861/problem/D 解题思路&#xff1a; 优雅的暴力。 对于输入的每一个号码&#xff0c;从短到长找出它的所有子串&#xff0c;用 vector 保存每个号码对应的所有子串&#xff0c;用 map 为所有子串做标记&#xff0c;输出答案…

海思CEA-861时序配置

配置时序 在sample中只需要设置为User时序即可&#xff0c;如下图&#xff1a; 用户时序的结构体&#xff1a; typedef struct tagVO_SYNC_INFO_S { HI_BOOL bSynm; /* sync mode(0:timing,as BT.656; 1:signal,as LCD) */HI_BOOL bIop; /* interlaced or progr…