wordpress做的网站效果6自己制作wordpress子主题
wordpress做的网站效果6,自己制作wordpress子主题,百度网站建设中心,网站策划岗位要求一、题目描述给一非空的单词列表#xff0c;返回前 k 个出现频率最高的单词。要求#xff1a;频率高的单词排在前面#xff1b;若多个单词频率相同#xff0c;按字典序升序排列#xff1b;保证答案唯一#xff0c;且 1 ≤ k ≤ 单词列表中不同单词的数量。示例 1#xf…一、题目描述给一非空的单词列表返回前k个出现频率最高的单词。要求频率高的单词排在前面若多个单词频率相同按字典序升序排列保证答案唯一且1 ≤ k ≤ 单词列表中不同单词的数量。示例 1输入words [i,love,leetcode,i,love,coding], k 2输出[i,love]解释i 和 love 分别出现 2 次i 字典序小于 love故排在前。示例 2输入words [the,day,is,sunny,the,the,the,sunny,is,is], k 4输出[the,is,sunny,day]解释频率排序the (4) is (3) sunny (2) day (1)频率相同无冲突按顺序返回前 4 个。二、解法思路解法一哈希表 自定义排序1.思路分析统计频率用哈希表统计每个单词的出现次数自定义排序对哈希表的键值对排序排序规则为优先按频率降序频率高的在前频率相同时按单词字典序升序字典序小的在前截取结果取排序后前k个单词作为答案。2. 完整代码带详细注释class Solution: def topKFrequent(self, words: List[str], k: int) - List[str]: # 统计每个单词的出现频率 dictword {} for word in words: # get方法简化计数存在则取当前值1不存在则默认01 dictword[word] dictword.get(word, 0) 1 # 自定义排序 # keylambda x: (-x[1], x[0]) # -x[1]按频率降序负号实现降序x[0]频率相同时按单词字典序升序 dictword_sorted sorted(dictword.items(), keylambda x: (-x[1], x[0])) # 3. 截取前k个单词组装结果列表 res [] for key, val in dictword_sorted[:k]: res.append(key) return res3. 代码核心解析1频率统计words [i,love,leetcode,i,love,coding]遍历后 dictword {i:2, love:2, leetcode:1, coding:1}。2自定义排序sorted(dictword.items(), keylambda x: (-x[1], x[0]))dictword.items()将字典转为元组列表 [(i,2), (love,2), (leetcode,1), (coding,1)]keylambda x: (-x[1], x[0])-x[1]对频率x [1]取负实现降序2 1x[0]频率相同时按单词x [0]的字典序升序i love排序结果[(i,2), (love,2), (coding,1), (leetcode,1)]。3截取结果取前 k2 个元组的单词部分得到 [i,love]符合题目要求。4. 复杂度分析时间复杂度O(nlogn)统计频率O(n)n 为单词列表长度排序O(mlogm)m 为不同单词的数量m≤n是时间瓶颈空间复杂度O(n)哈希表存储所有不同单词排序需额外存储元组列表整体为O(n)。5. 优缺点优点代码极简、逻辑直观无需自定义类或掌握堆的复杂用法新手极易上手缺点排序需遍历所有不同单词当n极大如且k极小时如 k10效率低于堆解法。解法二哈希表 小顶堆1. 思路分析针对排序解法的效率问题用小顶堆优化仅维护k个元素避免对所有单词排序核心逻辑哈希表统计频率同解法一遍历哈希表将单词频率推入小顶堆保持堆大小不超过k超过则弹出 “最小” 元素堆中剩余的k个元素是前k高频单词反转后得到最终结果2. 完整代码带详细注释import heapq class Solution: def topKFrequent(self, words: List[str], k: int) - List[str]: # 统计每个单词的出现频率 mapping {} for word in words: mapping[word] mapping.get(word, 0) 1 # 初始化小顶堆筛选前k个高频单词 heap [] for key, val in mapping.items(): # 将自定义Node推入堆heapq会按__lt__规则排序 heapq.heappush(heap, Node(key, val)) # 保持堆大小为k超过则弹出“最小”的元素频率最低/同频率字典序大 if len(heap) k: heapq.heappop(heap) # 提取堆中元素并调整顺序 res [] # 弹出堆顶此时堆内元素是“小→大”如[love, i] while len(heap) 0: temp heapq.heappop(heap) res.append(temp.key) # 反转后得到“大→小”的正确顺序如[i, love] res.reverse() return res # 自定义堆节点类实现比较逻辑 class Node: def __init__(self, key, val): self.key key # 单词 self.value val # 出现频率 # 核心自定义小于__lt__规则适配小顶堆的排序逻辑 def __lt__(self, other): # 规则1频率相同 → 字典序大的单词“更小”优先被弹出 if self.value other.value: return self.key other.key # 规则2频率不同 → 频率小的单词“更小”优先被弹出 else: return self.value other.value3. 核心解析关键难点1自定义 Node 类的比较规则Python 的heapq默认是小顶堆需重写__lt__方法less than适配题目规则def __lt__(self, other): return self.keyother.key if self.valueother.value else self.valueother.value频率相同字典序大的单词如 love被判定为 “更小”优先弹出频率不同频率小的单词如 coding被判定为 “更小”优先弹出。2堆筛选过程以示例 1 为例推入 (i,2) → 堆[Node (i,2)]大小 1 ≤2推入 (love,2) → 堆[Node (love,2), Node (i,2)]大小 2 ≤2推入 (leetcode,1) → 堆大小 32 → 弹出堆顶Node (leetcode,1)推入 (coding,1) → 堆大小 32 → 弹出堆顶Node (coding,1)最终堆内元素[Node(love,2), Node(i,2)]弹出后反转得到[i,love]。4. 复杂度分析时间复杂度O(nlogk)统计频率O(n)堆操作每次 push/pop 为O(logk)最多执行m次m≤n整体为O(mlogk)当k≪n时O(nlogk)≪O(nlogn)效率优势明显空间复杂度O(n)哈希表 堆堆仅占O(k)。5. 优缺点优点时间效率更高适合大数据量、小 k 的场景缺点代码稍复杂需理解堆的特性和自定义比较规则。