日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之下——设计键

發布時間:2023/12/4 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之下——设计键 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在很多應用中,我們會發現某種映射關系(模式),但它并不是簡單一 一對應的。這時,我們就要從鍵 key 入手,通過設計合適的鍵,建立映射關系。leetbook的這個章節總結了一些常見的鍵,以供參考。

49. 字母異位詞分組

class Solution:def groupAnagrams(self, strs: List[str]) -> List[List[str]]:str_dict = dict()for word in strs:s_word = str(sorted(word))if s_word in str_dict:str_dict[s_word].append(word)else:str_dict[s_word] = [word]ans = []for value in str_dict.values():ans.append(value)return ans

對于有相同字母但是位置不同的單詞(字母異位詞),可知它們的模式(共通點)就是字母構成相同,所以只需要以固定的順序比較這些單詞(排序),即可發現這個模式。注意 sorted(word) 得到的是列表,不能作為 key,應該將其轉為字符串 str 后再作為 key

249. 移位字符串分組

class Solution:def groupStrings(self, strings: List[str]) -> List[List[str]] :hashtable = defaultdict(list) # 遇到不存在的key不會報錯的dictfor s in strings :if s[0] == 'a':hashtable[s].append(s)else:key = list(s)key[0] = 'a'diff = ord(s[0]) - ord('a')for i in range(1, len(s)): key[i] = chr(ord(s[i]) - diff) if ord(s[i]) - diff >= ord('a') else chr(ord(s[i]) - diff + 26)key = ''.join(key)hashtable[key].append(s)ans = []for mode, sublist in hashtable.items():ans.append(sublist)return ans

此處用到了 collections.defaultdict,顧名思義,就是有默認值的 dict,因此遇到不存在的 key 不會報 KeyError 錯誤。對移位字符串進行分組,我們可以用每個組的第一個字符串,也就是首字母為 ‘a’ 的字符串作為該組的代表(鍵),因為這個字符串包含了該組的字符串長度的信息與各字母偏移的信息,同組的其余字符串只不過是相對它有一定的偏移而已。因此,對于一個字符串,首先將其首字母變成 ‘a’,記錄偏移量 diff,后面的字母都按照 diff 進行偏移,若越界則加 26 循環回來,得到這個字符串對應的鍵并加入到字典中。

36. 有效的數獨

class Solution:def isValidSudoku(self, board: List[List[str]]) -> bool:rows = collections.defaultdict(list)cols = collections.defaultdict(list)squares = collections.defaultdict(list)for i in range(len(board)):for j in range(len(board[0])):if board[i][j] == '.':continueif board[i][j] in rows[i] or board[i][j] in cols[j] or board[i][j] in squares[(i//3, j//3)]:return Falseelse:rows[i].append(board[i][j])cols[j].append(board[i][j])squares[(i//3, j//3)].append(board[i][j])return True

數獨中的行、列、3x3宮都是一種模式,相同行、列的元素顯然它的行索引 i 和列索引 j 是一樣的,那同一個3x3宮的元素呢?可以發現,元素的行或者列整除3的結果,表示了元素從行或者列數起的第幾個宮內,所以可以使用(i // 3, j // 3)作為3x3宮的模式。

652. 尋找重復的子樹

class Solution():def findDuplicateSubtrees(self, root):trees = collections.defaultdict()trees.default_factory = trees.__len__ #當嘗試查找字典中不存在的鍵時,會創建一個條目,其值等于字典中的項目數count = collections.Counter()ans = []def lookup(node):if node:uid = trees[node.val, lookup(node.left), lookup(node.right)] # 前序遍歷count[uid] += 1if count[uid] == 2:ans.append(node)return uidlookup(root)return ans

trees.default_factory = trees.__len__是一個小技巧,講解在這里。在這里我們用子樹的(根節點值、左子樹uid、右子樹uid)作為 uid,唯一標識這個子樹。只有當兩個子樹的 uid 相同時,認為這兩個子樹是相同的。

總結

以上是生活随笔為你收集整理的哈希表(散列表)基础概念与经典题目(Leetcode题解-Python语言)之下——设计键的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 18女人毛片| www.人人草 | 免费观看黄色一级视频 | 一区二区三区视频观看 | 亚洲激情六月 | 色干干 | 久久亚洲av无码精品色午夜麻豆 | 黄网在线观看视频 | 麻豆精品一区二区三区 | 奇米影视在线视频 | 人人爱人人 | 男人天堂五月天 | 久久免费播放 | 国产熟女一区二区三区五月婷 | 亚洲av少妇一区二区在线观看 | 天堂中文在线看 | 黄色三级视频网站 | 色婷婷av一区二区三区四区 | 国产精品自产拍高潮在线观看 | 国产成人无码精品久久久性色 | 啪啪网站免费看 | 内地毛片| 91久久精品一区二区三 | 日韩伦理视频 | 日日摸日日碰夜夜爽无码 | 精品国产欧美一区二区 | 跪求黄色网址 | 国产第七页 | 俺去俺来也在线www色官网 | 国产亚洲精品一区二区三区 | 久久乐视频 | 波多野结衣导航 | 瑟瑟视频在线免费观看 | 午夜资源 | 亚洲专区一区 | 亚洲精品在线观看网站 | 日韩精品极品视频免费观看 | 国产日韩av在线播放 | 免费av网站观看 | a级黄色片 | 日本在线观看a | 欧洲亚洲综合 | 色婷婷av一区二区三区gif | 制服.丝袜.亚洲.中文.综合 | 我我色综合 | 免费在线一区二区三区 | 蜜桃视频成人 | av色图| 好吊色一区二区 | 美女av一区| 蜜臀久久99精品久久久画质超高清 | 五级毛片| 欧美在线观看a | 亚洲性图一区二区 | 俺去久久 | 国产女主播一区二区三区 | 邪恶久久| 黄色国产| 国产乱人乱偷精品视频 | 国产一级视频 | 超碰人人搞 | 国产精品免费无码 | 欧美三级午夜理伦三级小说 | 久久免费视频6 | 国产精品高潮呻吟久久久久久 | 欧美一级视频免费 | 97在线视频免费 | 毛片视屏 | 亚洲国产精品成人va在线观看 | 色94色欧美sute亚洲线路二 | 大j8黑人w巨大888a片 | 99在线观看视频 | 美女一级黄色片 | 国产又粗又猛又黄 | 亚洲一级色 | 噜噜狠狠狠狠综合久久 | 调教撅屁股啪调教打臀缝av | 欧美日韩国产麻豆 | 国产精选在线 | 久操操 | 女性裸体无遮挡胸 | 久久久国产精华液 | 日韩色婷婷 | 中文字幕在线观看网址 | 性猛交娇小69hd | 久草视频在线观 | 国产夫妻自拍av | 久久精品免费在线 | 日韩美女视频网站 | 日本免费网站在线观看 | 男插女动态图 | 免费av一区 | 蜜臀视频在线观看 | 91麻豆蜜桃 | 丰满人妻老熟妇伦人精品 | 伊人影院综合 | 午夜福利123| 久久无毛| 美女黄页网站 |