我有一个问题,我分析并概括到这个级别,我需要解决这个问题以获得高效的性能
我从数据库中获取了大量项目,例如 1_A_B、2_A、2_B、2_A_C、1_C、1_B、2_B_C 等。
现在,当用户选择A(他只能选择字母,基于应该返回的数字值)时,他需要获得2,因为2_A存在,这意味着选择A可以显示2
如果用户选择B,他将同时获得2,1,如果他选择B_C,他将仅获得2
输入的顺序是随机的。那么我应该设计怎样的效率或哪种数据结构来获得最佳性能并保持最佳的内存使用
我想和Map<Alphabets,List<Numerics>>
一起去但是用字母组合来显示数字并不容易[B_C和C_B应该返回相同的结果,并且会有很多字母组合]
最佳答案
不知道这是否能很好地解决您的问题, 但如果你的字母表相当有限,我会解析每个字母表并将其转换为 2 的幂。
例如,我分配
A = 1 (2^0)
B = 2 (2^1)
C = 4 (2^2)
D = 8 (2^3)
..等等。
然后,我会使用HashMap<Integer, List<Integer>>
来存储数据。
在HashMap中,key是字母的数值之和,value成为数据前缀的数字列表。
例如,
给定1_A_B, 2_A, 2_B, 2_A_C, 1_C, 1_B, 2_B_C
,
1_A_B将存储在map[3, {1}]下,2_A将存储在map[1, {2}]下,依此类推。 因此给定数据集的 map 看起来像
3, {1} //1_A_B
1, {2} //2_A
2, {2, 1} //2_B , 1_B
5, {2} //2_A_C
4, {1} //1_C
6, {2} //2_B_C
当输入 B_C 时,您可以简单地查找值为 6 (B+C) 的键,从而返回 2 作为答案。
上述方法也适用于处理 B_C 和 C_B 的情况,因为 B_C 和 C_B 的总和相同。
关于java - 设计数据结构以根据键组合选择值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14950111/