陣列翻轉 861 翻轉矩陣後的得分

2021-10-14 18:48:08 字數 1246 閱讀 3365

有乙個二維矩陣 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 <= 201 <= a[0].length <= 20a[i][j]01本題其實想到的了非常簡單,我們要保證每一行構成的二進位制數最大,並且可以翻轉行和列,那麼肯定要將最高位變成一,這樣才能保證這個數是所有組合中最大的。然後判斷每一列,需要知道每列中1的個數多還是0的個數多,如果1多就不翻轉,如果0多就翻轉,即取兩者出現次數較大的。最後,我們不需要改變原陣列就可以計算所有最大數之和,具體來說,已經將最開始的位置變為了1,那麼result就是

m為行數,n為列數,然後計算每一列的情況,結果為

k01較大出現的次數,i為當前列數索引。這裡需要注意一點,就是處理每一列時,需要首先判斷該行第乙個元素是否為1,也就是判斷該行是否進行了翻轉,如果翻轉,情況就會是1 - a[j][i],即相反情況。

具體**如下:

class solution  else 

}int k = math.max(count, m - count);

result = result + k * (1 << (n - i - 1));

}return result;}}

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 翻轉矩陣後的得分

題目描述 有乙個二維矩陣 a 其中每個元素的值為 0 或 1 移動是指選擇任一行或列,並轉換該行或列中的每乙個值 將所有 0 都更改為 1,將所有 1 都更改為 0。在做出任意次數的移動後,將該矩陣的每一行都按照二進位制數來解釋,矩陣的得分就是這些數字的總和。返回盡可能高的分數。示例 輸入 0,0,...