每日一題:leetcode1128.等價多米諾骨牌對數

題目描述

在這里插入圖片描述

題目分析

看到題目以后第一個想法是遍歷數組,對每個元素有一個數據結構中保存了該元素出現的次數,然后往結果中相加(表示該元素和前面的對數),然后再將元素出現的次數加一。
思考用什么數據結構保存元素出現次數的時候想到用線性哈希,看到數據最大不超過10,那么就用10?x+y10*x+y10?x+y即可。這樣很容易獲得所有牌出現的次數。
這個時候我懶得每次往結果中加元素了。如果很容易獲得牌出現的次數n,想要得到有多少對,即就是Cn2C_{n}^{2}Cn2?
看了題解以后,我覺得應該我這樣的做法復雜度稍微優秀一點點,因為往結果中加入是O(n)O(n)O(n)的復雜度,但是將所有牌遍歷一遍是O(1)O(1)O(1)的復雜度

AC代碼

class Solution {
public:int numEquivDominoPairs(vector<vector<int>>& dominoes) {int ret = 0;constexpr int MAXN = 10;vector<int> mp(MAXN * MAXN, 0);for (auto &item : dominoes) {int hash;if (item[0] >= item[1]) {hash = item[0] * MAXN + item[1];} else {hash = item[1] * MAXN + item[0];}++mp[hash];}for (auto &n : mp) {if (n > 1) {ret += n * (n-1) / 2;}}return ret;}
};

官方代碼

class Solution {
public:int numEquivDominoPairs(vector<vector<int>>& dominoes) {vector<int> num(100);int ret = 0;for (auto& it : dominoes) {int val = it[0] < it[1] ? it[0] * 10 + it[1] : it[1] * 10 + it[0];ret += num[val];num[val]++;}return ret;}
};//作者:LeetCode-Solution
//鏈接:https://leetcode-cn.com/problems/number-of-equivalent-domino-pairs/solution/deng-jie-duo-mi-nuo-gu-pai-dui-de-shu-li-yjlz/
//來源:力扣(LeetCode)
//著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

題解寫法的優秀的地方在于用了一個三元表達式,顯得代碼比較簡潔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/383573.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/383573.shtml
英文地址,請注明出處:http://en.pswp.cn/news/383573.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日一題:leetcode1579.保證圖可完全遍歷

題目描述 題目分析 非常慚愧&#xff0c;感覺自己有點畏難心理&#xff0c;看到是困難題第一個想法是自己想不出來。。。 因為自己認為自己做不出來&#xff0c;所以完全不能進行思考&#xff0c;稍微思考一下就覺得不行不行。 我也想到了分別用兩個并查集判斷各自可以去掉多少…

每日一題:leetcode724.尋找數組的中心索引

題目描述 題目分析 今天這道題原本很簡單&#xff0c;我都沒打算寫題解&#xff0c;當時用手機看的題目&#xff0c;我想著我三分鐘應該能寫出來&#xff0c;結果沒想到wa了三發。。。 對待簡單題不要輕視&#xff0c;對待難題不要畏難。 今天的主要問題是沒有看數據范圍&…

C++Primer學習筆記:第2章 變量和基本類型

空類型不對應具體的值&#xff0c;僅用于一些特殊的場合 long的長度為32位&#xff0c;float有&#xff17;個有效位&#xff0c;double有16個有效位 如果數值超過了int的范圍&#xff0c;應該用long long而不是long&#xff0c;long一般和int一樣大 在算術表達式中不要使用…

C++Primer學習筆記:第3章 字符串、向量和數組

可以使用using聲明而無需專門的前綴&#xff1a;using namespace::name;.。位于頭文件的代碼一般來說不應該使用using聲明&#xff0c;這是因為頭文件的內容會拷貝到所有引用他的文件中去&#xff0c;如果頭文件中有某個using聲明&#xff0c;那么每個使用了該頭文件的文件都會…

C++Primer學習筆記:第4章 表達式

表達式由一個或多個運算對象組成&#xff0c;對表達式求值將得到一個結果。字面值和變量是最簡單的表達式&#xff0c;其結果就是字面值和變量的值。把一個運算符和一個或多個運算對象組合起來可以生成較復雜的表達式。 重載運算符包括運算對象的類型和返回值的類型&#xff0…

C++Primer學習筆記:第5章 語句

一個表達式末尾加上分號就變成了表達式語句。最簡單的語句是空語句&#xff08;一個單獨的分號&#xff09;&#xff1a;語法上需要一條語句但是邏輯上不需要 復合語句是指用花括號括起來的&#xff08;可能為空&#xff09;語句和聲明的序列&#xff1a;用在語法上需要一條語…

z3 C++學習筆記

因為項目需要使用z3庫來解決問題&#xff0c;所以自己學習了一下&#xff0c;結果發現網上教程比較少&#xff0c;而且大部分都是使用Python&#xff0c;而我本人是C的忠實信徒&#xff0c;在知道C也可以使用z3庫以后我毫不猶豫地著手用C使用z3&#xff0c;但是我很快發現&…

C++Primer學習筆記:第6章 函數

通過調用運算符()調用函數 函數的調用完成兩項工作&#xff1a; 用實參初始化函數對應的形參將控制權轉移給被調用函數&#xff1a;主調函數的執行被暫時中斷&#xff0c;被調函數開始執行 盡管實參與形參存在對應關系&#xff0c;但是并沒有規定實參的求值順序。編譯器能以任…

C++Primer學習筆記:第8章 IO庫

C語言不直接處理輸入輸出&#xff0c;而是通過一族定義在標準庫中的類型來處理IO iostream定義了用于讀寫流的基本類型fstream定義了讀寫命名文件的類型sstream定義了讀寫內存string對象的類型 標準庫使得我們能夠忽略這些不同類型的流之間的差異&#xff0c;是通過繼承機制實…

C++Primer學習筆記:第7章 類

類的基本思想是數據抽象data abstraction和封裝encapsulation。數據抽象是一種依賴于接口interface和實現implementation分離的編程技術 在類中&#xff0c;由類的設計者負責考慮類的實現過程&#xff0c;使用該類的程序員只需要抽象地思考類型做了什么&#xff0c;而無須了解…

每日一題:leetcode191.位1的個數

題目描述 題目分析 很自然地想到了二進制枚舉&#xff0c;直接循環檢查每一個二進制位。 class Solution { public:int hammingWeight(uint32_t n) {int ret 0;uint32_t t 1;for (int i 0; i < 32; i, t << 1) {if (n & t) {ret;}}return ret;} };AC之后看了…

每日一題:leetcode341.扁平化嵌套列表迭代器

題目描述 題目分析 這個題目自己大概花了一個小時&#xff0c;雖然是一遍AC&#xff0c;但是速度有點慢&#xff0c;太長時間不寫代碼導致自己對代碼不太敏感&#xff0c;寫起來慢騰騰的。 看到這個的想法就是&#xff0c;要用棧來保存列表的迭代器&#xff0c;這樣將孩子列表…

每日一題:leetcode82. 刪除排序鏈表中的重復元素 II

題目描述 題目分析 這才是正常的中等題難度嘛&#xff0c;昨天的中等題題解我半天看不懂。。。 首先&#xff0c;需要增加一個啞節點&#xff08;操作鏈表的常規操作&#xff09;&#xff0c;因為有可能刪除首節點&#xff0c;我們不想要為首節點添加單獨的邏輯。其次&#xf…

每日一題:leetcode456.132模式

題目描述 題目分析 我覺得這道題應該是我做過最難的中等題之一了&#xff0c;這是昨天的每日一題&#xff0c;但是昨天用nlogn的做法做出來以后在看題解&#xff0c;發現有些看不懂&#xff08;覺得題解有點故弄玄虛&#xff09;。然后今天中午又花了一點時間才搞懂&#xff0…

leetcode283.移動零

題目描述 題目分析 在寫簡單題放松&#xff0c;看到這道題第一個想法是用STL庫函數&#xff0c;雖然知道大概要用雙指針之類的&#xff0c;但是庫函數爽哇。 class Solution { public:void moveZeroes(vector<int>& nums) {stable_sort(nums.begin(), nums.end(), …

每日一題:leetcode61.旋轉鏈表

題目描述 題目分析 很容易發現&#xff0c;如果k是n的整數倍&#xff0c;相當于沒有移動。這樣直接對k%n使得k在一個可以接受的范圍。 因為是順序移動&#xff0c;各元素之間的相對位置保持不變&#xff0c;所以就想著將鏈表先變成一個環。然后再移動頭指針&#xff0c;最后再…

每日一題:leetcode173.二叉搜索樹迭代器

題目描述 題目分析 更加地覺得編程重要的不在于如何寫代碼&#xff0c;用什么具體的技巧&#xff0c;編碼本身只是一種將思維呈現的方式&#xff0c;但是如果思維是不清晰的&#xff0c;那么就算懂得再多的編碼的奇技淫巧也是沒有什么幫助的。相反&#xff0c;如果有一個清晰的…

Ubuntu20.04 Clion/Pycharm/IDEA 輸入中文+光標跟隨解決方案

ibus輸入法&#xff08;棄用&#xff09; 之前一直用的搜狗輸入法&#xff0c;但是搜狗輸入法無法在Jetbrains全家桶下使用&#xff0c;但是又需要輸入中文&#xff0c;沒有辦法我只能下載了谷歌輸入法&#xff0c;十分難用&#xff0c;但是也沒有其他辦法&#xff0c;經常到網…

leetcode11.盛最多水的容器

題目描述 題目分析 看到題目后第一個想法當然是O(n2)O(n^2)O(n2)的&#xff0c;但是數據范圍是3e4&#xff0c;應該會超時&#xff0c;而且這種數據范圍也不是讓暴力求解的 。 相當于求解∑i<jmax((j?i)?min(a[i],a[j]))\sum_{i<j}{max((j-i)*min(a[i],a[j]))}∑i<…

每日一題:leetcode190.顛倒二進制位

題目描述 題目分析 題目本身很簡單&#xff0c;沒覺得有什么技巧可以再進行優化了&#xff0c;覺得位運算是無法打亂相對順序的&#xff0c;而這里需要進行鏡像顛倒的操作。因此就踏實地寫了一個循環。 在使用位運算得到每一位的時候&#xff0c;我吸取了經驗&#xff0c;用一…