Leetcode 861 - Score After Flipping Matrix

題目

Problem#

給你 $m \times n$ 的二維陣列 grid 裡面只包含 01,你可以對每行、列進行 flip 操作(0110),每列可以組成一個 binary 數字,最後加總起來就是分數,你可以 flip 無限次(或不 flip),問你最大的分數是多少。

測資限制#

  • $1 \le m, n \le 20$

想法#

貪心

目標要找最大,所以最左邊的 bit 一定要是 1,如果有一列的最左 bit 是 0 的話,就 flip 整列。接著剩下的行,就看 01 的數量,目標是所有 1 的數量都要「大於等於」 0 的數量,所以遇到 1 的數量小於 0 的數量的行,就 flip 該行,如此一來便是最大的數字。

加總 $m$ 列即是答案。

AC Code#

  • 時間複雜度: $\mathcal{O}(mn)$
  • 空間複雜度: $\mathcal{O}(1)$