摘要:如果其中某一張多米諾骨牌可以通過(guò)旋轉(zhuǎn)度或度得到另一張多米諾骨牌,我們就認(rèn)為這兩張牌是等價(jià)的。等價(jià)多米諾骨牌對(duì)的數(shù)量暴力破解法有效解答等價(jià)多米諾骨牌對(duì)的數(shù)量由于,所以最大值不會(huì)超過(guò)以形式表示骨牌對(duì),這個(gè)是翻轉(zhuǎn)度即本身翻轉(zhuǎn)度后,只要累加一次即可
前言
Weekly Contest 146的 等價(jià)多米諾骨牌對(duì)的數(shù)量:
解題思路給你一個(gè)由一些多米諾骨牌組成的列表 dominoes。
如果其中某一張多米諾骨牌可以通過(guò)旋轉(zhuǎn) 0 度或 180 度得到另一張多米諾骨牌,我們就認(rèn)為這兩張牌是等價(jià)的。
形式上,dominoes[i] = [a, b] 和 dominoes[j] = [c, d] 等價(jià)的前提是 a==c 且 b==d,或是 a==d 且 b==c。
在 0 <= i < j < dominoes.length 的前提下,找出滿足 dominoes[i] 和 dominoes[j] 等價(jià)的骨牌對(duì) (i, j) 的數(shù)量。
示例:
輸入:dominoes = [[1,2],[2,1],[3,4],[5,6]] 輸出:1提示:
1 <= dominoes.length <= 40000
1 <= dominoes[i][j] <= 9
一開始我是試了一下暴力破解這個(gè)方法,可惜運(yùn)行超時(shí),只好另想它法了。
后續(xù)參考了Java中的HashMap的位桶的設(shè)計(jì),思路如下:
數(shù)字result表示等價(jià)的骨牌對(duì)個(gè)數(shù),數(shù)組arr表示多米諾骨牌出現(xiàn)的次數(shù),其中數(shù)組下標(biāo)i(假設(shè)骨牌dominoe=[a,b],則i=a*10+b)表示對(duì)應(yīng)的多米諾骨牌,arr[i]表示該骨牌出現(xiàn)的次數(shù)
遍歷多米諾骨牌列表dominoes,對(duì)于每個(gè)骨牌dominoe,假設(shè)dominoe=[a,b],然后按照以下邏輯處理
使用a*10+b計(jì)算出旋轉(zhuǎn)0度時(shí)在arr的下標(biāo)index1;使用b*10+a計(jì)算出旋轉(zhuǎn)180度是在arr的下標(biāo)index2
如果index1等于index2,即表示dominoe的a等于b,此時(shí)result增加arr[index1],同時(shí)arr[index1]的值自增(避免多累加一次)即可
如果index1不等于index2,即表示dominoe的a不等于b,此時(shí)result增加arr[index1],同時(shí)arr[index1]和arr[index2]都自增。
實(shí)現(xiàn)代碼 暴力破解暴力破解的方法會(huì)出現(xiàn)運(yùn)行超時(shí)的情況,這個(gè)是一個(gè)錯(cuò)誤的示例,列出來(lái)給大家參考一下。
/** * 5130. 等價(jià)多米諾骨牌對(duì)的數(shù)量 * 暴力破解法 * @param dominoes * @return */ public int numEquivDominoPairs(int[][] dominoes) { int result = 0; for (int i = 0; i < dominoes.length; i++) { int a = dominoes[i][0]; int b = dominoes[i][1]; for (int j = i+1; j < dominoes.length; j++) { int c = dominoes[j][0]; int d = dominoes[j][1]; if((a==c && b==d) || (a==d && b==c)){ ++result; } } } return result; }有效解答
/** * 5130. 等價(jià)多米諾骨牌對(duì)的數(shù)量 * * @param dominoes * @return */ public int numEquivDominoPairs(int[][] dominoes) { int result = 0; // 由于1 <= dominoes[i][j] <= 9,所以最大值不會(huì)超過(guò)99 int[] arr = new int[100]; for (int i = 0; i < dominoes.length; i++) { // 以ij形式表示骨牌對(duì)(i,j),這個(gè)是翻轉(zhuǎn)0度(即本身) int index1=dominoes[i][0]*10+dominoes[i][1]; // 翻轉(zhuǎn)180度后 int index2=dominoes[i][1]*10+dominoes[i][0]; if(index1 == index2){ // i==j,只要累加一次即可 result+=arr[index1]; arr[index1]++; }else{ result+=arr[index1]; arr[index1]++; arr[index2]++; } } return result; }
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/75530.html
摘要:程序失敗時(shí),很難確定錯(cuò)誤的位置。它保護(hù)客戶免受單位工作細(xì)節(jié)的影響。將前提條件放在中,并將后置條件放入和。涉及可變對(duì)象的契約現(xiàn)在取決于每個(gè)引用可變對(duì)象的每個(gè)人的良好行為。設(shè)計(jì)規(guī)約按規(guī)約分類比較規(guī)約它是如何確定性的。 大綱 1.編程語(yǔ)言中的功能/方法2.規(guī)約:便于交流的編程,為什么需要規(guī)約 行為等同規(guī)約結(jié)構(gòu):前提條件和后條件測(cè)試和驗(yàn)證規(guī)約3.設(shè)計(jì)規(guī)約分類規(guī)約圖表規(guī)約質(zhì)量規(guī)約4.總結(jié) 編程...
摘要:回顧什么是內(nèi)聯(lián)樣式所謂內(nèi)聯(lián)樣式,就是通過(guò)頁(yè)面元素的屬性為當(dāng)前元素定義樣式。對(duì)象提供的屬性和方法可以幫助我們獲取樣式的具體內(nèi)容。遍歷對(duì)象由于對(duì)象具有屬性,返回該對(duì)象的屬性的數(shù)量。方法通過(guò)獲取的樣式屬性名,這種方式也可以通過(guò)方式進(jìn)行替換。 回顧什么是內(nèi)聯(lián)樣式 所謂內(nèi)聯(lián)樣式,就是通過(guò) HTML 頁(yè)面元素的 style 屬性為當(dāng)前元素定義 CSS 樣式。 以下代碼示例,就是通過(guò) style 屬...
摘要:結(jié)論這次主要介紹了函數(shù)式編程中的函數(shù)的原理和實(shí)現(xiàn)方法,由于篇幅原因,我把打算分析的源碼實(shí)現(xiàn)放到下一篇來(lái)介紹,可以說(shuō)實(shí)現(xiàn)的更加函數(shù)式,需要單獨(dú)好好分析。 上一篇文章介紹了javascript函數(shù)式編程中curry(柯里化)的實(shí)現(xiàn),當(dāng)然那個(gè)柯里化是有限參數(shù)的柯里化,等有機(jī)會(huì)在補(bǔ)上無(wú)限參數(shù)的那一種柯里化,這次主要說(shuō)的是javascript函數(shù)式編程中另外一個(gè)很重要的函數(shù)compose,com...
摘要:這么長(zhǎng)時(shí)間沒(méi)有寫博客,就是因?yàn)楹瘮?shù)這部分比較麻煩,自己一直想抽出大把的時(shí)間來(lái)研究這個(gè),可是結(jié)果卻是一拖再拖,這樣不好。 這么長(zhǎng)時(shí)間沒(méi)有寫博客,就是因?yàn)楹瘮?shù)這部分比較麻煩,自己一直想抽出大把的時(shí)間來(lái)研究這個(gè),可是結(jié)果卻是一拖再拖,這樣不好。有時(shí)間就寫才是王道啊,不然這計(jì)劃得一直卡在這里了.. 1. 幾個(gè)概念 函數(shù):將代碼進(jìn)行封裝, 復(fù)用的邏輯單元(代碼)對(duì)象:無(wú)序鍵值對(duì)的集合數(shù)組:有序鍵...
摘要:按下右側(cè)的點(diǎn)擊預(yù)覽按鈕可以在當(dāng)前頁(yè)面預(yù)覽,點(diǎn)擊鏈接可以打開原始頁(yè)面。 按下右側(cè)的點(diǎn)擊預(yù)覽按鈕可以在當(dāng)前頁(yè)面預(yù)覽,點(diǎn)擊鏈接可以打開原始頁(yè)面。 1. 觀影打分特效https://codepen.io/PointC/pen... 2. 純 css 寫的騎自行車的動(dòng)畫https://codepen.io/dmaristem/... 3. 移動(dòng)端菜單特效https://codepen.io/mi...
閱讀 1644·2021-10-09 09:44
閱讀 2805·2021-10-08 10:04
閱讀 2475·2021-09-26 09:55
閱讀 3855·2021-09-22 10:02
閱讀 3315·2019-08-29 17:08
閱讀 1075·2019-08-29 15:08
閱讀 2963·2019-08-26 13:52
閱讀 3279·2019-08-26 13:34