Python实现存储整数各位重复数字的类字典结构支持O(1)访问
实现方案
首先明确:Python原生字典(哈希表)的键具有全局唯一性,天然不支持存储重复键,你预期的同键多次出现的字典结构本身违背哈希表的设计逻辑,没有实际实现的必要——查询时你无法指定要取同名下的哪一个值,完全不具备实用价值。
结合你补充的需求(O(1)复杂度查询指定数字在整数中出现的所有索引位置),只需要调整字典的存储值结构即可,不需要自定义新的数据结构:将每个数字作为唯一键,对应值存储该数字出现过的所有索引的列表,就能完全满足要求。
代码实现
基础原生写法,不需要导入额外模块:
n = 941726149 d = {} for idx, digit in enumerate(str(n)): # 首次遇到该数字时初始化空列表 if digit not in d: d[digit] = [] # 追加当前索引到对应列表 d[digit].append(idx) print(d)
如果追求代码简洁,可以用标准库的defaultdict简化逻辑:
from collections import defaultdict n = 941726149 d = defaultdict(list) for idx, digit in enumerate(str(n)): d[digit].append(idx)
效果验证
对应你给出的测试用例,输出完全符合要求:
- 当
n = 123455时,d['5']的返回值为[4, 5] - 当
n = 987385时,d['8']的返回值为[1, 4],d['9']的返回值为[0]
查询时直接通过数字作为键取对应的索引列表,时间复杂度为O(1),完全匹配你最初的性能要求。如果需要按原顺序遍历整数的每一位,直接遍历str(n)即可,不需要依赖字典存储顺序。
内容的提问来源于stack exchange,提问作者Cardstdani
相关产品推荐
相关产品推荐

