1072. Flip Columns For Maximum Number of Equal Rows解題報告

Description:

image.png

Link:

https://leetcode.com/problems/flip-columns-for-maximum-number-of-equal-rows/

解題方法:

解這道題有一些細(xì)節(jié)需要想清楚:

  1. 矩陣中元素要么是0要么是1,而我們能做的操作是翻轉(zhuǎn)(0->1 or 1->0),所以最后結(jié)果某一行不管是全為0還是全為1其實(shí)是一樣的(以下稱為全等),并不會影響這道題的解。
  2. 假設(shè)任意兩行在某一列上不相同,那么無論如果翻轉(zhuǎn),他們的最終結(jié)果都不會相同,但是需要注意的是,這并不影響他們成為全等的行(他們也可能一個全為0,另一個全為1)。
  3. 我們總是能通過翻轉(zhuǎn)操作讓至少一行全等.
  4. 這個細(xì)節(jié)可以用來論證解法)因?yàn)槊看畏D(zhuǎn)我們都要對每一列上的所有元素進(jìn)行翻轉(zhuǎn),我們并不能對單獨(dú)幾行的列進(jìn)行翻轉(zhuǎn),所以當(dāng)我們通過一系列翻轉(zhuǎn),讓一行全等之后,其他行的結(jié)果已經(jīng)便成為了一個定值,總結(jié)來說就是:當(dāng)某一行全等時,整個矩陣全等行數(shù)已經(jīng)成為一個定值。
  5. 根據(jù)細(xì)節(jié)4,這道題的解肯定會出現(xiàn)在我們嘗試讓某一行全等的時候,也就是說,如果我們輪流讓某一行全等(根據(jù)細(xì)節(jié)1,全為0還是全為1無所謂)的過程中,矩陣中最多的全等行數(shù)就是這道題的解。
  6. 減少時間復(fù)雜度的細(xì)節(jié))對任意的兩行ij,假設(shè)ij為0的列數(shù)的集合各自為 i0和j0,為1的列數(shù)的集合各自為i1和j1,如果i0 == j0或者i0 == j1的時候,那么這嘗試吧一行變成全等之后,另一行肯定也會是全等。
  7. 所以根據(jù)細(xì)節(jié)6,我們只需要把每行為0和為1的列數(shù)都統(tǒng)計起來,可以把列數(shù)轉(zhuǎn)換為string,用兩個hash存起來,然后遍歷其中一個hash表的string,獲得對應(yīng)的計數(shù),再加上另一個hash表中相同string的計數(shù),就是其中一個解(即把一行變成全等的解),找出這些解的最大值就是本題所求。

Tips

其實(shí)不需要兩個hash表,一個就夠了。

Time Complexity:

O(mn)

完整代碼:

class Solution {
public:
    int maxEqualRowsAfterFlips(vector<vector<int>>& matrix) {
        int ans = 0;
        unordered_map<string, int> zeros;
        unordered_map<string, int> ones;
        for(int i = 0; i < matrix.size(); i++) {
            string zero, one;
            for(int j = 0; j < matrix[0].size(); j++) {
                if(matrix[i][j] == 1) {
                    one += to_string(j);
                } else {
                    zero += to_string(j);
                }
            }
            zeros[zero]++;
            ones[one]++;
        }
        for(auto a: zeros) {
            ans = max(a.second + ones[a.first], ans);
        }
        return ans;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自: 結(jié)構(gòu)之法算法之道blog 前言 一般而言,標(biāo)題含有“秒殺”,“99%”,“史上最全/最強(qiáng)”等詞匯的往往都...
    王帥199207閱讀 1,247評論 0 13
  • 1. 關(guān)于診斷X線機(jī)準(zhǔn)直器的作用,錯誤的是()。 (6.0 分) A. 顯示照射野 B. 顯示中心線 C. 屏蔽多...
    我們村我最帥閱讀 11,412評論 0 5
  • 選擇是一件看起來很簡單而瀟灑的事情,但是在大家的眼里,可不是這么認(rèn)為的,它充滿了艱難,意味著舍棄。同時也有一定的風(fēng)...
    每天叨叨五分鐘閱讀 444評論 0 0
  • 干貨有一個特點(diǎn),就是文字多。知乎上的大神,一篇文章堪比半本書,本人寫不出,那就用總結(jié)吧。某人說上一篇文章太長,字...
    暗江流閱讀 588評論 0 0
  • 炎熱夏日,送你些清涼 “童真與詩意相遇” The Snowy Day《下雪天》,凱迪克金獎作品。以一個小孩在雪地中...
    MABEL梅閱讀 598評論 2 1

友情鏈接更多精彩內(nèi)容