zoukankan      html  css  js  c++  java
  • letcode每日一题-翻转矩阵后的得分

    先上题目描述

    思路:
    1.如果我们想让翻转后的矩阵和最大则必须让数组的第一列都为1,所以我们要对第一列不是1的行先进行一个翻转
    的操作。
    2.当第一列都是1以后我们就可以对除了第一列的列进行操作了,统一列1越多最后的结果也就越大,我们可以统计1
    的个数,如果1的个数超过0的则不需要进行翻转,否则进行翻转。
    3.实际编写代码时,我们无需修改原矩阵,而是可以计算每一列对总分数的「贡献」,从而直接计算出最高的分数。
    假设矩阵共有 m 行 n 列,计算方法如下:
    1.对于最左边的列而言,由于最优情况下,它们的取值都为 1,因此每个元素对分数的贡献都为1<<n-1,则贡
    献总额为 m(1<<n-1)
    2.对于第 jj 列(j>0,此处规定最左边的列是第 0 列)而言,我们统计这一列 0,1 的数量,令其中的最大
    值为 k,则 k 是列翻转后的 1 的数量,该列的总贡献为 k
    (1<<(n-j-1))。需要注意的是,在统计 0,1 的数量的
    时候,要考虑最初进行的行反转。
    代码实现如下:

    
    public int matrixScore(int[][] A) {
            int row=A.length,col=A[0].length;
            int rel=row*(1<<col-1);
            for(int i=1;i<col;i++){
                int oneCol=0;
                for(int j=0;j<row;j++){
                    if(A[j][0]==1){
                        oneCol+= A[j][i];
                    }else{
                        oneCol+= (1-A[j][i]);
                    }
                }
                int k = Math.max(oneCol, row - oneCol);
                rel += k * (1 << (col - i - 1));
            }
            return rel;
        }
    
    

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

  • 相关阅读:
    记录心得-IntelliJ iDea 创建一个maven管理的的javaweb项目
    记录心得-FastJson分层解析demo示例
    11.05Mybatis注解
    11.03Mybatis标签
    11.04Mybatis resultMap元素
    11.02Mybatis Mapper映射器
    11.02Mybatis SQL执行方式
    10.30Mybatis配置文件及其元素
    10.30Mybatis三要素
    10.29第一个Mybatis程序
  • 原文地址:https://www.cnblogs.com/MissWX/p/14095815.html
Copyright © 2011-2022 走看看