首页 > 其他 > 详细

20.12.7 leetcode861

时间:2020-12-07 10:54:45      阅读:18      评论:0      收藏:0      [点我收藏+]

题目链接:https://leetcode-cn.com/problems/score-after-flipping-matrix/

题意:给一个二维的01矩阵,可以任意翻转某一行和某一列(将该行/列的01互换),最后计数时以将每一行当做一个二进制数,每行相加就是总的分数,求最大分数为多少。

分析:首先,对行列的翻转顺序不会改变最后的值(以一个点来看,不管它被以怎么样的顺序翻转,他翻转的次数是固定的),我们可以先考虑行翻转,这里为了使二进制数最大,一定是要让第一列的数都为1,之后我们每一列来分别计算贡献,可以根据每一行第一列原本是否为1来判断当前的数有否经过翻转(可以通过同或判断),然后以01谁数目多来判断该列是否需要翻转。

class Solution {
public:
    int matrixScore(vector<vector<int>>& A) {
        int r=A.size(),c=A[0].size();
        int ans=0;
        ans+=r*(1<<(c-1));
        for(int i=1;i<c;i++){
            int zero=0,one=0;
            for(int j=0;j<r;j++){
                if(!(A[j][i]^A[j][0]))one++;
                else zero++;
            }
            int t=max(zero,one);
            ans+=t*(1<<(c-i-1));
        }
        return ans;
    }
};

 

20.12.7 leetcode861

原文:https://www.cnblogs.com/qingjiuling/p/14095806.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!