1128. 等價多米諾骨牌對的數(shù)量

題目描述

思路

  • 法一(哈希):把每個domino都轉(zhuǎn)換成一個對象筒占,該對象重寫了hashCode和equals方法婚被,當兩個domino的兩個數(shù)一樣時認為這兩個domino相等(tips:hashCode的結(jié)果也應該滿足該條件)。遍歷一遍計下每個domino出現(xiàn)的次數(shù)為count,然后將每個count*(count-1)/2相加即為最終結(jié)果。
  • 法二(二維轉(zhuǎn)一維):觀察到dominoes[i][j]為1到9之間的數(shù)∧乎澹可以直接將domino轉(zhuǎn)化為一個100以內(nèi)的整數(shù)寞缝,這個整數(shù)的十位為domino中較大數(shù),個位為domino中較小數(shù)仰泻。遍歷一遍該數(shù)組荆陆,進行轉(zhuǎn)化的同時使用一個int[100]數(shù)組記錄每個數(shù)出現(xiàn)的次數(shù)count。最終將每個count*(count-1)/2相加即為最終結(jié)果集侯。

哈希

java代碼如下

import java.util.HashMap;
import java.util.Map;

class Solution {
    class Domino {
        int a;
        int b;

        public Domino(int a, int b) {
            this.a = a;
            this.b = b;
        }

        @Override
        public int hashCode() {
            int hash = 17;
            hash = (hash + a * 31 + b * 31) * 31;
            return hash;
        }

        @Override
        public boolean equals(Object obj) {
            if (obj instanceof Domino) {
                Domino s = (Domino) obj;
                if ((s.a == this.a && s.b == this.b) || (s.a == this.b && s.b == this.a)) {
                    return true;
                } else {
                    return false;
                }
            }
            return super.equals(obj);
        }

    }

    public int numEquivDominoPairs(int[][] dominoes) {
        int length = dominoes.length;
        int res = 0;
        Map<Domino, Integer> repeatMap = new HashMap<>();
        Map<Integer, Integer> countMap = new HashMap<>();

        for (int i = 0; i < length; i++) {
            Domino domino = new Domino(dominoes[i][0], dominoes[i][1]);
            if (repeatMap.containsKey(domino)) {
                int value = repeatMap.get(domino) + 1;
                repeatMap.put(domino, value);
            } else {
                repeatMap.put(domino, 1);
            }
        }

        for (Integer value : repeatMap.values()) {
            if (value > 1) {
                if (countMap.containsKey(value)) {
                    res += countMap.get(value);
                } else {
                    countMap.put(value, value * (value - 1) / 2);
                    res += countMap.get(value);
                }
            }
        }

        return res;
    }
}

執(zhí)行用時:13 ms, 在所有 Java 提交中擊敗了26.33%的用戶
內(nèi)存消耗:47.2 MB, 在所有 Java 提交中擊敗了96.09%的用戶

結(jié)果不好被啼,如果題目沒有說明1 <= dominoes[i][j] <= 9的話結(jié)果應該是挺不錯的。但是在這一條件下浅悉,有更好的方法趟据。

二維轉(zhuǎn)一維

java代碼如下

class Solution {
    public int numEquivDominoPairs(int[][] dominoes) {
        int[] counts = new int[100];
        int length = dominoes.length;
        int res = 0;
        for (int i = 0; i < length; i++) {
            int num = transform(dominoes[i]);
            counts[num]++;
        }
        for (int i = 0; i < 100; i++) {
            int count = counts[i];
            if (count > 1) {
                res += count * (count - 1) / 2;
            }
        }
        return res;
    }

    public int transform(int[] nums) {
        int a = nums[0];
        int b = nums[1];
        int res = a > b ? a * 10 + b : b * 10 + a;
        return res;
    }
}

執(zhí)行用時:2 ms, 在所有 Java 提交中擊敗了97.76%的用戶
內(nèi)存消耗:48 MB, 在所有 Java 提交中擊敗了9.46%的用戶

ojbk

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者术健。
  • 序言:七十年代末汹碱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荞估,更是在濱河造成了極大的恐慌咳促,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勘伺,死亡現(xiàn)場離奇詭異跪腹,居然都是意外死亡,警方通過查閱死者的電腦和手機飞醉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門冲茸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缅帘,你說我怎么就攤上這事轴术。” “怎么了钦无?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵逗栽,是天一觀的道長。 經(jīng)常有香客問我失暂,道長彼宠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任弟塞,我火速辦了婚禮凭峡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘决记。我一直安慰自己摧冀,他們只是感情好,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著按价,像睡著了一般。 火紅的嫁衣襯著肌膚如雪笙瑟。 梳的紋絲不亂的頭發(fā)上楼镐,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天,我揣著相機與錄音往枷,去河邊找鬼框产。 笑死,一個胖子當著我的面吹牛错洁,可吹牛的內(nèi)容都是我干的秉宿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屯碴,長吁一口氣:“原來是場噩夢啊……” “哼描睦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啃擦,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荷荤,失蹤者是張志新(化名)和其女友劉穎占锯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體韵丑,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年虚缎,在試婚紗的時候發(fā)現(xiàn)自己被綠了撵彻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡实牡,死狀恐怖陌僵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铲掐,我是刑警寧澤拾弃,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站摆霉,受9級特大地震影響豪椿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜携栋,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一搭盾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧婉支,春花似錦鸯隅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炕舵。三九已至,卻和暖如春跟畅,著一層夾襖步出監(jiān)牢的瞬間咽筋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工徊件, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奸攻,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓虱痕,卻偏偏與公主長得像睹耐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子部翘,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容