如何查找并存储随机数的indexes?负数场景可行性咨询
查找随机数的索引并存储的实现方案
核心思路
这本质是**字典编码(Dictionary Encoding)**的应用:先提取原始数组的唯一值并排序,给每个值分配一个唯一索引,再用该索引替代原始值存储。
具体实现步骤(以Python为例)
- 提取原始数组的唯一值并排序,构建「值→索引」的映射表
- 遍历原始数组,将每个值替换为对应的索引
代码示例
针对你给出的示例数组 [300, 2, 43, 12, 0, 1, 90]:
# 原始数据 original_nums = [300, 2, 43, 12, 0, 1, 90] # 步骤1:生成排序后的唯一值列表,建立值到索引的映射 sorted_unique = sorted(set(original_nums)) value_to_index = {val: idx for idx, val in enumerate(sorted_unique)} # 步骤2:用索引替换原始值 encoded_indexes = [value_to_index[num] for num in original_nums] print("原始数值:", original_nums) print("对应索引:", encoded_indexes)
输出结果完全匹配你的示例:
原始数值: [300, 2, 43, 12, 0, 1, 90] 对应索引: [6, 2, 4, 3, 0, 1, 5]
关于用索引替代原始值存储
当然可以这么做,且有明显优势:
- 若原始值是大整数、长字符串等占用空间大的数据,用小整数索引能大幅节省存储空间
- 当数据存在大量重复值时,这种编码方式能显著降低存储冗余
- 后续需要还原原始值时,只要保留排序后的唯一值列表,就能通过索引反向映射回原始值
关于负数的支持
完全支持负数。比如原始数组为 [-5, 3, -2, 3, 0],排序后的唯一值是 [-5, -2, 0, 3],对应的映射表为 {-5:0, -2:1, 0:2, 3:3},编码后的索引数组就是 [0, 3, 1, 3, 2],逻辑和正数完全一致。
内容的提问来源于stack exchange,提问作者Davit
相关产品推荐
相关产品推荐

