861 翻轉矩陣後的得分

2021-10-11 15:34:41 字數 1234 閱讀 5607

題目描述:

有乙個二維矩陣 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 <= a.length <= 20

1 <= a[0].length <= 20

a[i][j] 是 0 或 1

方法1:

主要思路:解題彙總

(1)貪心,直觀的想,就是盡量將每行前面的數字為一的盡可能的多,因為越靠前的數字,表示的權重越大;

(2)第一步將每行的第乙個數字通過行變換,都變成1;

(3)然後統計每列上的1的個數,可以通過列變換,保證沒列上的1盡可能的多,然後每列表示的二進位制權重是一樣的,故可以直接根據該列當前的1的個數,計算出可能獲得較多的1的個數,作為該列對應的權重個數,求和即可;

class

solution

int rows=a.

size()

;int cols=a[0]

.size()

; vector<

int>

sign

(cols,0)

;//統計各列上的1的個數

for(

int i=

0;i++i)

else}}

}//統計各個列上的1的個數

for(

int i=

0;i++i)}}

int step=1;

int res=0;

//根據個列上1的個數,作為權重的個數,求和即可;

for(

int i=cols-

1;i>=0;

--i)

else

//改變權重

step<<=1;

}return res;}}

;

861 翻轉矩陣後的得分

package com.heu.wsq.leetcode 861.翻轉矩陣後的得分 author wsq date 2020 12 7 有乙個二維矩陣 a 其中每個元素的值為 0 或 1 移動是指選擇任一行或列,並轉換該行或列中的每乙個值 將所有 0 都更改為 1,將所有 1 都更改為 0。在做出任...

861 翻轉矩陣後的得分

貪心 為了確保得到的值最大,陣列第一列必須是1,首先就可以對二維陣列的第一列不是1的記錄進行反轉,然後再處理列,每列中的1的個數大於一半,就進行反轉。這樣就能確保得到的值最大。這是第一次過題 對二維陣列進行了反轉,其實不用,只需要求值就可以了。class solution for int i 1 i...

861 翻轉矩陣後的得分

861.翻轉矩陣後的得分 寫在前面的話 看到題目之後是比較懵的,感覺是要使用貪心演算法,然後就大體上演算了一下,發現遵循三個步驟就可以實現 1 將陣列每一行第乙個元素的值轉換為1 對行進行操作 2 判斷轉換後的陣列中每一列元素的情況 3 計算結果 實現 public int matrixscore ...