861. 翻转矩阵后的得分

861. 翻转矩阵后的得分

 

 

 

 

 

 

--写在前面的话--

看到题目之后是比较懵的,感觉是要使用贪心算法,然后就大体上演算了一下,发现遵循三个步骤就可以实现:

(1)将数组每一行第一个元素的值转换为1  --->  对行进行操作

(2)判断转换后的数组中每一列元素的情况:

  • 若1的数量少于0的数量  -->  进行转换
  • 否则  -->  不做处理

(3)计算结果

--实现代码--

 public int matrixScore(int[][] A) {

        //第一步:将第一列数字全部置为1
        for(int[] i:A){
            if(i[0]==0){
                for(int j=0;j<i.length;++j){
                    if(i[j]==0)
                        i[j]=1;
                    else i[j]=0;
                }
            }
        }

        //第二步:比较每一列中1和0的个数,保证1的个数>=0的个数
        for(int j=1;j<A[0].length;++j){
            int count = 0;
            for(int i=0;i<A.length;i++){
                if(A[i][j]==1)
                    count++;
            }
            if(count<(A.length+1)/2){
                for(int i=0;i<A.length;i++){
                    if(A[i][j]==1)
                        A[i][j]=0;
                    else A[i][j]=1;
                }

            }
        }

        //第三步:计算数值结果
        int res=0;
        for(int i=0;i<A.length;++i){
            for(int j=0;j<A[0].length;++j){
                res += A[i][j]*Math.pow(2,A[0].length-j-1);
            }
        }

        return res;

    }

 

posted @ 2020-12-07 09:50  进击的小渣渣!!  阅读(93)  评论(0)    收藏  举报