如何制作一个成功的网站媒体平台?
摘要:网站开发示例,媒体网站怎么做,二七网站建设,帝国cms个人网站模板好久不更了,这次一鼓作气,学完它! 文章目录LeetCode Cookbook 哈希
网站开发示例,媒体网站怎么做,二七网站建设,帝国cms个人网站模板好久不更了#xff0c;这次一鼓作气#xff0c;学完它#xff01; 文章目录LeetCode Cookbook 哈希表30. 串联所有单词的子串36. 有效的数独#xff08;很不错的循环题目#xff09;49. 字母异位词分组290. 单词规律447. 回旋镖的数量575. 分糖果594. 最长和谐子序列599. …好久不更了这次一鼓作气学完它
文章目录LeetCode Cookbook 哈希表30. 串联所有单词的子串36. 有效的数独很不错的循环题目49. 字母异位词分组290. 单词规律447. 回旋镖的数量575. 分糖果594. 最长和谐子序列599. 两个列表的最小索引总和648. 单词替换字典树 Trie676. 实现一个魔法字典705. 设计哈希集合745. 前缀和后缀搜索811. 子域名访问计数884. 两句话中的不常见单词961. 在长度 2N 的数组中找出重复 N 次的元素1207. 独一无二的出现次数总结LeetCode Cookbook 哈希表 本节是与哈希表相关的习题非常不错的17道题在这里分享给大家如果喜欢的话欢迎点赞收藏家关注哦 30. 串联所有单词的子串
题目链接30. 串联所有单词的子串 题目大意给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如如果 words [“ab”,“cd”,“ef”] 那么 “abcdef” “abefcd”“cdabef” “cdefab”“efabcd” 和 “efcdab” 都是串联子串。 “acdbef” 不是串联子串因为他不是任何 words 排列的连接。 返回所有串联字串在 s 中的开始索引。你可以以 任意顺序 返回答案。
注意11 s.length 10410^410421 words.length 500031 words[i].length 304words[i] 和 s 由小写英文字母组成
例如
输入s barfoothefoobarman, words [foo,bar]
输出[0,9]
解释因为 words.length 2 同时 words[i].length 3连接的子字符串的长度必须为 6。
子串 barfoo 开始位置是 0。它是 words 中以 [bar,foo] 顺序排列的连接。
子串 foobar 开始位置是 9。它是 words 中以 [foo,bar] 顺序排列的连接。
输出顺序无关紧要。返回 [9,0] 也是可以的。输入s wordgoodgoodgoodbestword, words [word,good,best,word]
输出[]
解释因为 words.length 4 并且 words[i].length 4所以串联子串的长度必须为 16。
s 中没有子串长度为 16 并且等于 words 的任何顺序排列的连接。
所以我们返回一个空数组。输入s barfoofoobarthefoobarman, words [bar,foo,the]
输出[6,9,12]
解释因为 words.length 3 并且 words[i].length 3所以串联子串的长度必须为 9。
子串 foobarthe 开始位置是 6。它是 words 中以 [foo,bar,the] 顺序排列的连接。
子串 barthefoo 开始位置是 9。它是 words 中以 [bar,the,foo] 顺序排列的连接。
子串 thefoobar 开始位置是 12。它是 words 中以 [the,foo,bar] 顺序排列的连接。解题思路 哈希表比较容易理解一些。时间复杂度O(n2)O(n^2)O(n2) 方法1滑动窗口为O(n)O(n)O(n)空间复杂度O(n)O(n)O(n)
class Solution:def findSubstring(self, s: str, words: List[str]) - List[int]:if not s or not words: return []one_word len(words[0])all_words one_word*len(words)n len(s)nums len(words)if none_word: return []words Counter(words)ans []# 方法1 滑动窗口# for i in range(0,one_word):# cur_cnt 0# left,right i,i# cur_Counter Counter()# while rightone_word n:# w s[right:rightone_word]# right one_word# if w not in words:# left right# cur_Counter.clear()# cur_cnt 0# else:# cur_Counter[w] 1# cur_cnt 1# while cur_Counter[w] words[w]:# left_w s[left:leftone_word]# left one_word# cur_Counter[left_w] - 1# cur_cnt - 1# if cur_cnt nums:# ans.append(left)# return ans# hash 表for i in range(n-all_words1):tmp s[i:iall_words]c_tmp []# 把单词分割一下一个一个往里放for j in range(0,all_words,one_word):c_tmp.append(tmp[j:jone_word])# 使用计数器看一下 是不是子单词都齐全了if Counter(c_tmp) words:ans.append(i)return ans36. 有效的数独很不错的循环题目
题目链接36. 有效的数独 题目大意请你判断一个 9 x 9 的数独是否有效。只需要 根据以下规则 验证已经填入的数字是否有效即可。 1.数字 1-9 在每一行只能出现一次。 2.数字 1-9 在每一列只能出现一次。 3.数字 1-9 在每一个以粗实线分隔的 3x3 宫内只能出现一次。请参考示例图 注意 1一个有效的数独部分已被填充不一定是可解的。 2只需要根据以上规则验证已经填入的数字是否有效即可。 3空白格用 ‘.’ 表示。 4board.length 9board[i].length 9board[i][j] 是一位数字1-9或者 ‘.’。
例如
输入board
[[5,3,.,.,7,.,.,.,.]
,[6,.,.,1,9,5,.,.,.]
,[.,9,8,.,.,.,.,6,.]
,[8,.,.,.,6,.,.,.,3]
,[4,.,.,8,.,3,.,.,1]
,[7,.,.,.,2,.,.,.,6]
,[.,6,.,.,.,.,2,8,.]
,[.,.,.,4,1,9,.,.,5]
,[.,.,.,.,8,.,.,7,9]]
输出true解题思路写好循环注意九宫格的第三个要求可以适当记忆一下。在固定的个9*9数据计算中复杂度不随数据变化而变化。时间复杂度O(1)O(1)O(1)空间复杂度O(1)O(1)O(1)
class Solution:def isValidSudoku(self, board: List[List[str]]) - bool:# 行、列、块row [[]*9 for _ in range(9)]col [[]*9 for _ in range(9)]nine [[]*9 for _ in range(9)]for i in range(9):for j in range(9):tmp board[i][j]if not tmp.isdigit():continue# 是否同行或同列出现相同的if tmp in row[i] or tmp in col[j]:return False# 判断九宫格if tmp in nine[(j//3)*3i//3]:return Falserow[i].append(tmp)col[j].append(tmp)nine[(j//3)*3i//3].append(tmp)return True 49. 字母异位词分组
题目链接49. 字母异位词分组 题目大意给你一个字符串数组请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的字母得到的一个新单词所有源单词中的字母通常恰好只用一次。 注意11 strs.length 10410^410420 strs[i].length 1003strs[i] 仅包含小写字母。
例如
输入: strs [eat, tea, tan, ate, nat, bat]
输出: [[bat],[nat,tan],[ate,eat,tea]]输入: strs []
输出: [[]]输入: strs [a]
输出: [[a]]解题思路注意字符串连接排序后的字符数组需要连接。时间复杂度O(n(k∣Σ∣))O(n(k∣\Sigma∣))O(n(k∣Σ∣))其中 nnn 是 strs\textit{strs}strs 中的字符串的数量kkk 是 strs\textit{strs}strs 中的字符串的的最大长度Σ\SigmaΣ 是字符集在本题中字符集为所有小写字母∣Σ∣26|\Sigma|26∣Σ∣26。需要遍历 nnn 个字符串对于每个字符串需要 O(k)O(k)O(k) 的时间计算每个字母出现的次数O(∣Σ∣)O(|\Sigma|)O(∣Σ∣)的时间生成哈希表的键以及 O(1)O(1)O(1) 的时间更新哈希表因此总时间复杂度是 O(n(k∣Σ∣))O(n(k|\Sigma|))O(n(k∣Σ∣))。空间复杂度O(n(k∣Σ∣))O(n(k∣\Sigma∣))O(n(k∣Σ∣))
class Solution:def groupAnagrams(self, strs: List[str]) - List[List[str]]:if len(strs)2:return [strs]d collections.defaultdict(list)for s in strs:# sorted(s) 返回的内容是字符串数组 需要join一下s1 .join(sorted(s))d[s1].append(s)return list(d.values())290. 单词规律
题目链接290. 单词规律 题目大意给定一种规律 pattern 和一个字符串 s 判断 s 是否遵循相同的规律。 这里的 遵循 指完全匹配例如 pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。 注意11 pattern.length 3002pattern 只包含小写英文字母31 s.length 30004s 只包含小写英文字母和 ’ 5s 不包含 任何前导或尾随对空格s 中每个单词都被 单个空格分隔。
例如
输入: pattern abba, s dog cat cat dog
输出: true输入:pattern abba, s dog cat cat fish
输出: false输入: pattern aaaa, s dog cat cat dog
输出: false解题思路 哈希表来做zip()函数非常好用。时间复杂度O(nm)O(nm)O(nm) n,m分别为pattern和s的长度空间复杂度O(nm)O(nm)O(nm)
class Solution:def wordPattern(self, pattern: str, s: str) - bool:def match(word,pattern):mp {}for m,p in zip(word,pattern):if m not in mp:mp[m] pelif mp[m] ! p:return Falsereturn Trueword s.split()return match(pattern,word) and match(word,pattern) and len(word) len(pattern)447. 回旋镖的数量
题目链接447. 回旋镖的数量 题目大意给定平面上 n 对 互不相同 的点 points 其中 points[i] [xi,yi][x_i, y_i][xi,yi] 。回旋镖 是由点 (i, j, k) 表示的元组 其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等需要考虑元组的顺序。 返回平面上所有回旋镖的数量。
注意1n points.length21 n 5003points[i].length 24−104xi,yi104-10^4 x_i, y_i 10^4−104xi,yi1045所有点都互不相同。
例如
输入points [[0,0],[1,0],[2,0]]
输出2
解释两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]]输入points [[1,1],[2,2],[3,3]]
输出2输入points [[1,1]]
输出0解题思路注意用到了组合公式。时间复杂度O(n2)O(n^2)O(n2)n为数组长度空间复杂度O(n)O(n)O(n)
class Solution:def numberOfBoomerangs(self, points: List[List[int]]) - int:if len(points)3:return 0ans 0for a in points:d collections.defaultdict(int)for b in points:dis (b[0]-a[0])**2(b[1]-a[1])**2d[dis] 1for n in d.values():# 组合公式 从d[b]个中抽2两个排列ansn*(n-1)return ans575. 分糖果
题目链接575. 分糖果 题目大意Alice 有 n 枚糖其中第 i 枚糖的类型为 candyType[i] 。Alice 注意到她的体重正在增长所以前去拜访了一位医生。 医生建议 Alice 要少摄入糖分只吃掉她所有糖的 n / 2 即可n 是一个偶数。Alice 非常喜欢这些糖她想要在遵循医生建议的情况下尽可能吃到最多不同种类的糖。 给你一个长度为 n 的整数数组 candyType 返回 Alice 在仅吃掉 n / 2 枚糖的情况下可以吃到糖的 最多 种类数。 注意1n candyType.length22n1042 n 10^42n1043n 是一个偶数4−105candyType[i]105-10^5 candyType[i] 10^5−105candyType[i]105。
例如
输入candyType [1,1,2,2,3,3]
输出3
解释Alice 只能吃 6 / 2 3 枚糖由于只有 3 种糖她可以每种吃一枚。输入candyType [1,1,2,3]
输出2
解释Alice 只能吃 4 / 2 2 枚糖不管她选择吃的种类是 [1,2]、[1,3] 还是 [2,3]她只能吃到两种不同类的糖。输入candyType [6,6,6,6]
输出1
解释Alice 只能吃 4 / 2 2 枚糖尽管她能吃 2 枚但只能吃到 1 种糖。解题思路不难可以用 集合容器set 进行去重。时间复杂度O(n)O(n)O(n) n为candyType的长度空间复杂度O(n)O(n)O(n)
class Solution:def distributeCandies(self, candyType: List[int]) - int:n1 len(candyType)//2n2 len(set(candyType))return n1 if n2n1 else n2594. 最长和谐子序列
题目链接594. 最长和谐子序列 题目大意和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 现在给你一个整数数组 nums 请你在所有可能的子序列中找到最长的和谐子序列的长度。 数组的子序列是一个由数组派生出来的序列它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 注意11nums.length2∗1041 nums.length 2 * 10^41nums.length2∗1042−109nums[i]109-10^9 nums[i] 10^9−109nums[i]109。
例如
输入nums [1,3,2,2,5,2,3,7]
输出5
解释最长的和谐子序列是 [3,2,2,2,3]输入nums [1,2,3,4]
输出2输入nums [1,1,1,1]
输出0解题思路巧用 Counter() 容器时间复杂度O(n)O(n)O(n) n为数组长度空间复杂度O(n)O(n)O(n)
class Solution:def findLHS(self, nums: List[int]) - int:if len(nums)2: return 0cnt collections.Counter(nums)ans 0for k in cnt:if k1 in cnt:t cnt[k]cnt[k1]ans t if tans else ansreturn ans599. 两个列表的最小索引总和
题目链接599. 两个列表的最小索引总和 题目大意假设 Andy 和 Doris 想在晚餐时选择一家餐厅并且他们都有一个表示最喜爱餐厅的列表每个餐厅的名字用字符串表示。 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅。 如果答案不止一个则输出所有答案并且不考虑顺序。 你可以假设答案总是存在。 注意11 list1.length, list2.length 100021 list1[i].length, list2[i].length 30 3list1[i] 和 list2[i] 由空格 ’ ’ 和英文字母组成4list1 的所有字符串都是 唯一 的list2 中的所有字符串都是 唯一 的。
例如
输入: list1 [Shogun, Tapioca Express, Burger King, KFC]list2 [Piatti, The Grill at Torrey Pines, Hungry Hunter Steakhouse, Shogun]
输出: [Shogun]
解释: 他们唯一共同喜爱的餐厅是“Shogun”。输入:list1 [Shogun, Tapioca Express, Burger King, KFC]list2 [KFC, Shogun, Burger King]
输出: [Shogun]
解释: 他们共同喜爱且具有最小索引和的餐厅是“Shogun”它有最小的索引和1(01)。解题思路 按题意做就行时间复杂度O(nm)O(nm)O(nm) ,n,m分别为list1和list2的长度空间复杂度O(n)O(n)O(n)
class Solution:def findRestaurant(self, list1: List[str], list2: List[str]) - List[str]:d {s:i for i,s in enumerate(list2)}ans,f [],2000for i,s in enumerate(list1):if s in d:t id[s]if t f:f id[s]ans [s]elif t f:ans.append(s) return ans648. 单词替换字典树 Trie
题目链接648. 单词替换 题目大意在英语中我们有一个叫做 词根(root) 的概念可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如词根an跟随着单词 other(其他)可以形成新的单词 another(另一个)。 现在给定一个由许多词根组成的词典 dictionary 和一个用空格分隔单词形成的句子 sentence。你需要将句子中的所有继承词用词根替换掉。如果继承词有许多可以形成它的词根则用最短的词根替换它。 你需要输出替换之后的句子。 注意11 dictionary.length 100021 dictionary[i].length 1003dictionary[i] 仅由小写字母组成41 sentence.length 10610^61065sentence 仅由小写字母和空格组成sentence 中单词的总量在范围 [1, 1000] 内sentence 中每个单词的长度在范围 [1, 1000] 内sentence 中单词之间由一个空格隔开sentence 没有前导或尾随空格。
例如
输入dictionary [cat,bat,rat], sentence the cattle was rattled by the battery
输出the cat was rat by the bat输入dictionary [a,b,c], sentence aadsfasf absbs bbab cadsfafs
输出a a b c解题思路 字典树背诵吧。时间复杂度O(nm))O(nm))O(nm)) nm分别为dictionary和sentence的长度空间复杂度O(n×C)O(n \times C)O(n×C) C26
class Trie:# 字典序 模板def __init__(self) - None:self.next collections.defaultdict(Trie)self.end Falsedef add(self, word: str) - None:cur selffor c in word:cur cur.next[c]if cur.end:returncur.end Truedef contain_prefix(self,word: str) - bool:cur selfprefix for c in word:if c in cur.next:cur cur.next[c]prefix c else:return Falseif cur.end:return prefixreturn Falseclass Solution: def replaceWords(self, dictionary: List[str], sentence: str) - str:trie Trie()for word in dictionary:trie.add(word)ans []for word in sentence.split():if prefix : trie.contain_prefix(word):ans.append(prefix)else:ans.append(word)return .join(ans)676. 实现一个魔法字典
题目链接676. 实现一个魔法字典 题目大意设计一个使用单词列表进行初始化的数据结构单词列表中的单词 互不相同 。 如果给出一个单词请判定能否只将这个单词中一个字母换成另一个字母使得所形成的新单词存在于你构建的字典中。
实现 MagicDictionary 类
MagicDictionary() 初始化对象 void buildDict(String[] dictionary) 使用字符串数组 dictionary 设定该数据结构dictionary 中的字符串互不相同 bool search(String searchWord) 给定一个字符串 searchWord 判定能否只将字符串中 一个 字母换成另一个字母使得所形成的新字符串能够与字典中的任一字符串匹配。如果可以返回 true 否则返回 false 。 注意11 dictionary.length 10021 dictionary[i].length 1003dictionary[i] 仅由小写英文字母组成4dictionary 中的所有字符串 互不相同51 searchWord.length 1006searchWord 仅由小写英文字母组成buildDict 仅在 search 之前调用一次7最多调用 100 次 search。
例如
输入
[MagicDictionary, buildDict, search, search, search, search]
[[], [[hello, leetcode]], [hello], [hhllo], [hell], [leetcoded]]
输出
[null, null, false, true, false, false]解释
MagicDictionary magicDictionary new MagicDictionary();
magicDictionary.buildDict([hello, leetcode]);
magicDictionary.search(hello); // 返回 False
magicDictionary.search(hhllo); // 将第二个 h 替换为 e 可以匹配 hello 所以返回 True
magicDictionary.search(hell); // 返回 False
magicDictionary.search(leetcoded); // 返回 False解题思路使用 list 时间复杂度O(qnl)O(qnl)O(qnl)其中 nnn 是数组 dictionary 的长度lll 是数组 dictionary 中字符串的平均长度qqq 是函数 search(searchWord)\text{search(searchWord)}search(searchWord) 的调用次数。 空间复杂度O(nl)O(nl)O(nl)
class MagicDictionary:def __init__(self):self.word list()def buildDict(self, dictionary: List[str]) - None:self.word dictionarydef search(self, searchWord: str) - bool:for word in self.word:if len(word) ! len(searchWord):continuediff 0for a,b in zip(word,searchWord):if a ! b:diff 1if diff 1:breakif diff 1:return Truereturn False# Your MagicDictionary object will be instantiated and called as such:
# obj MagicDictionary()
# obj.buildDict(dictionary)
# param_2 obj.search(searchWord)705. 设计哈希集合
题目链接705. 设计哈希集合 题目大意不使用任何内建的哈希表库设计一个哈希集合HashSet。 实现 MyHashSet 类 void add(key) 向哈希集合中插入值 key 。 bool contains(key) 返回哈希集合中是否存在这个值 key 。 void remove(key) 将给定值 key 从哈希集合中删除。如果哈希集合中没有这个值什么也不做。 注意10 key 10610^61062最多调用 10410^4104 次 add、remove 和 contains。
例如
输入
[MyHashSet, add, add, contains, contains, add, contains, remove, contains]
[[], [1], [2], [1], [3], [2], [2], [2], [2]]
输出
[null, null, null, true, false, null, true, null, false]解释
MyHashSet myHashSet new MyHashSet();
myHashSet.add(1); // set [1]
myHashSet.add(2); // set [1, 2]
myHashSet.contains(1); // 返回 True
myHashSet.contains(3); // 返回 False 未找到
myHashSet.add(2); // set [1, 2]
myHashSet.contains(2); // 返回 True
myHashSet.remove(2); // set [1]
myHashSet.contains(2); // 返回 False 已移除解题思路尽量优化一些时间复杂度O(1)O(1)O(1)空间复杂度O(数据范围)O(数据范围)O(数据范围)
class MyHashSet:def __init__(self):self.d []def add(self, key: int) - None:if key not in self.d:self.d.append(key)else: return def remove(self, key: int) - None:if len(self.d) 0 or key not in self.d:return else:id self.d.index(key)del(self.d[id])def contains(self, key: int) - bool:if key in self.d:return Trueelse: return False# Your MyHashSet object will be instantiated and called as such:
# obj MyHashSet()
# obj.add(key)
# obj.remove(key)
# param_3 obj.contains(key)745. 前缀和后缀搜索
题目链接745. 前缀和后缀搜索 题目大意设计一个包含一些单词的特殊词典并能够通过前缀和后缀来检索单词。 实现 WordFilter 类 WordFilter(string[] words) 使用词典中的单词 words 初始化对象。 f(string pref, string suff) 返回词典中具有前缀 prefix 和后缀 suff 的单词的下标。如果存在不止一个满足要求的下标返回其中 最大的下标 。如果不存在这样的单词返回 -1 。 注意11 words.length 10410^410421 words[i].length 731 pref.length, suff.length 74words[i]、pref 和 suff 仅由小写英文字母组成5最多对函数 f 执行 10410^4104 次调用。
例如
输入
[WordFilter, f]
[[[apple]], [a, e]]
输出
[null, 0]
解释
WordFilter wordFilter new WordFilter([apple]);
wordFilter.f(a, e); // 返回 0 因为下标为 0 的单词前缀 prefix a 且 后缀 suff e 。解题思路尽量优化一些时间复杂度初始消耗O(∑i0n−1wi3)O(\sum\limits_{i0}^{n-1}w_i^3)O(i0∑n−1wi3)其中wiw_iwi为每个单词的字符数。每次检索消耗O(ps)O(ps)O(ps)其中p和s分别为输入的pref和suff的长度。空间复杂度初始消耗O(∑i0n−1wi3)O(\sum\limits_{i0}^{n-1}w_i^3)O(i0∑n−1wi3)每次检索消耗O(ps)O(ps)O(ps)。
class WordFilter:def __init__(self, words: List[str]):self.d {}for i,word in enumerate(words):m len(word)for pre in range(1,m1):for suf in range(1,m1):self.d[word[:pre]#word[-suf:]] idef f(self, pref: str, suff: str) - int:return self.d.get(pref#suff,-1)# Your WordFilter object will be instantiated and called as such:
# obj WordFilter(words)
# param_1 obj.f(pref,suff)811. 子域名访问计数
题目链接811. 子域名访问计数 题目大意网站域名 “discuss.leetcode.com” 由多个子域名组成。顶级域名为 “com” 二级域名为 “leetcode.com” 最低一级为 “discuss.leetcode.com” 。当访问域名 “discuss.leetcode.com” 时同时也会隐式访问其父域名 “leetcode.com” 以及 “com” 。 计数配对域名 是遵循 “rep d1.d2.d3” 或 “rep d1.d2” 格式的一个域名表示其中 rep 表示访问域名的次数d1.d2.d3 为域名本身。 例如“9001 discuss.leetcode.com” 就是一个 计数配对域名 表示 discuss.leetcode.com 被访问了 9001 次。 给你一个 计数配对域名 组成的数组 cpdomains 解析得到输入中每个子域名对应的 计数配对域名 并以数组形式返回。可以按 任意顺序 返回答案。 注意11 cpdomain.length 10021 cpdomain[i].length 1003cpdomain[i] 会遵循 repid1i.d2i.d3irep_i \ d1_i.d2_i.d3_irepi d1i.d2i.d3i 或 repid1i.d2irep_i \ d1_i.d2_irepi d1i.d2i 格式4repirep_irepi 是范围 [1,104][1, 10^4][1,104] 内的一个整数5d1id1_id1i、d2id2_id2i 和 d3id3_id3i 由小写英文字母组成。
例如
输入
输入cpdomains [9001 discuss.leetcode.com]
输出[9001 leetcode.com,9001 discuss.leetcode.com,9001 com]
解释例子中仅包含一个网站域名discuss.leetcode.com。
按照前文描述子域名 leetcode.com 和 com 都会被访问所以它们都被访问了 9001 次。输入cpdomains [900 google.mail.com, 50 yahoo.com, 1 intel.mail.com, 5 wiki.org]
输出[901 mail.com,50 yahoo.com,900 google.mail.com,5 wiki.org,5 org,1 intel.mail.com,951 com]
解释按照前文描述会访问 google.mail.com 900 次yahoo.com 50 次intel.mail.com 1 次wiki.org 5 次。
而对于父域名会访问 mail.com 900 1 901 次com 900 50 1 951 次和 org 5 次。解题思路Counter时间复杂度O(L)O(L)O(L) L是数组 cpdomains 的长度空间复杂度O(L)O(L)O(L)
class Solution:def subdomainVisits(self, cpdomains: List[str]) - List[str]:counter collections.Counter()for cpdomain in cpdomains:n, ch cpdomain.split()num int(n)counter[ch] numwhile . in ch:ch ch[(ch.index(.)1):]counter[ch] numreturn [f{n} {ch} for ch,n in counter.items()]884. 两句话中的不常见单词
题目链接884. 两句话中的不常见单词 题目大意句子 是一串由空格分隔的单词。每个 单词 仅由小写字母组成。 如果某个单词在其中一个句子中恰好出现一次在另一个句子中却 没有出现 那么这个单词就是 不常见的 。 给你两个 句子 s1 和 s2 返回所有 不常用单词 的列表。返回列表中单词可以按 任意顺序 组织。
注意11 s1.length, s2.length 2002s1 和 s2 由小写英文字母和空格组成s1 和 s2 都不含前导或尾随空格s1 和 s2 中的所有单词间均由单个空格分隔。
例如
输入s1 this apple is sweet, s2 this apple is sour
输出[sweet,sour]输入s1 apple apple, s2 banana
输出[banana]解题思路使用Counter()时间复杂度O(nm)O(nm)O(nm)n和m分别为s1和s2的长度空间复杂度O(nm)O(nm)O(nm)
class Solution:def uncommonFromSentences(self, s1: str, s2: str) - List[str]:ans []s (s1 s2).split()cnt collections.Counter(s)for s in cnt:if cnt[s] 1:ans.append(s)return ans961. 在长度 2N 的数组中找出重复 N 次的元素
题目链接961. 在长度 2N 的数组中找出重复 N 次的元素 题目大意给你一个整数数组 nums 该数组具有以下属性 1.nums.length 2 * n. 2.nums 包含 n 1 个 不同的 元素 3.nums 中恰有一个元素重复 n 次 4.找出并返回重复了 n 次的那个元素。
注意12 n 50002nums.length 2 * n30 nums[i] 10410^41045nums 由 n 1 个 不同的 元素组成且其中一个元素恰好重复 n 次。
例如
输入nums [1,2,3,3]
输出3输入nums [2,1,2,5,3,2]
输出2输入nums [5,1,5,2,5,3,5,4]
输出5解题思路参考官方题解时间复杂度O(n)O(n)O(n)空间复杂度O(1)O(1)O(1)
class Solution:def repeatedNTimes(self, nums: List[int]) - int:# nums sorted(nums)# i len(nums)//2# return nums[i] if nums[i] nums[i1] else nums[i-1]# found set()# for num in nums:# if num in found:# return num# found.add(num)# return -1n len(nums)# 最多间隔两个元素for gap in range(1,4):for i in range(n-gap):if nums[i] nums[igap]:return nums[i]return -11207. 独一无二的出现次数
题目链接1207. 独一无二的出现次数 题目大意给你一个整数数组 arr请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的就返回 true否则返回 false。 注意11 arr.length 10002-1000 arr[i] 1000。
例如
输入arr [1,2,2,1,1,3]
输出true
解释在该数组中1 出现了 3 次2 出现了 2 次3 只出现了 1 次。没有两个数的出现次数相同。输入arr [1,2]
输出false输入arr [-3,0,1,-3,1,1,1,-3,10,0]
输出true解题思路使用Counter和defaultdict时间复杂度O(n)O(n)O(n) n为数组arr的长度空间复杂度O(n)O(n)O(n)
class Solution:def uniqueOccurrences(self, arr: List[int]) - bool:cnt collections.Counter(arr)d collections.defaultdict(list)ans []for i in cnt:d[cnt[i]].append(i)if len(d[cnt[i]])1:return Falsereturn False总结 努力 奋斗找工作。
