zoukankan      html  css  js  c++  java
  • 861. Score After Flipping Matrix

    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. 1 <= A.length <= 20
    2. 1 <= A[0].length <= 20
    3. A[i][j] is 0 or 1.

    Approach #1: C++.

    class Solution {
    public:
        int matrixScore(vector<vector<int>>& A) {
            int r = A.size(), c = A[0].size();
            int ans = 0;
            for (int i = 0; i < c; ++i) {
                int col = 0;
                for (int j = 0; j < r; ++j)
                    col += A[j][i] ^ A[j][0];       //相同为0, 不同为1。
                ans += max(col, r - col) * (1 << (c - 1 - i));
            }
            return ans;
        }
    };
    

      

    Analysis:

    Because every row of the matrix repersent a binary number, we want to the number become bigger, so the left-most column we can make it become 1. The others columns we can make it become 1 as more as possible by flipping the column. we count the number of how many number in the column is same as the left-most column. and using max(col, r - col) to get the number of 1 we can get.

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    修改linux下某一个文件夹下所有文件内容
    jenkins对结果进行断言问题
    linux 循环处理文件夹下所有文件脚本
    LR java Vuser 相关依赖JAR包,配置文件处置方法
    Jmeter函数 唯一取值 笔记
    jmeter+java vuser+rmi+dubbo脚本
    eclipse快捷键
    猫狗队列
    用固定长度的数组实现stack queue
    两个单链表相交的问题
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10305862.html
Copyright © 2011-2022 走看看