求快速查找名字的算法

时间:2021-12-17 23:29:28
如题

把1-100 分成1000等份,每一等份对应着一个名字,然后我随机从1-100 中选择一个数字,怎么能够快速的找到对应的名字?

我能够想到的对应的答案有两种

1.使用switch case 判断,当然这是反人性的。

2.将数据放到hashmap 里面,通过键值的形式找到,这样也不太好。

我想应该有更加好的方式来解决,请大伙支招。

12 个解决方案

#1


1000等分也就是1000个名字,1-100只有100个数字,难不成还有小数么?1.1、1.2、1.3……这样?

#2


引用 1 楼 m2200 的回复:
1000等分也就是1000个名字,1-100只有100个数字,难不成还有小数么?1.1、1.2、1.3……这样?


对的,如何给一个数字,就能够快速查找到对应的名字

#3


数字和名字之间有什么转换规则么?有规则的话,直接根据规则转换最好,没有的话,你无法凭空给他们添加关联关系,key-value是比较好的方式。

#4


直接用数组,然后通过下标去找可以不

下标*10;

#5


可以像通讯录一样 将名字首字母提取出来 分组并搜索

#6


跟#4楼一样. 如果一定要将1~100和1000个名字扯上关系的话可以将1000个名字存在数组中. 然后根据随机数字算出下标就能取出名字了

#7


引用 6 楼 bree06 的回复:
跟#4楼一样. 如果一定要将1~100和1000个名字扯上关系的话可以将1000个名字存在数组中. 然后根据随机数字算出下标就能取出名字了


假如不是分为1000等分,是分成10000等分,或者更多,这样数组就有可能存不下了。

#8


1、首字母排序
2、二分查找

#9


比如说你有 100个数 1000个人 
创建一个list 每个下标存储一个10位的list不就可以快速查不来了吗?
如果10000,那就100位的list,就是存储的时候需要for循环
取出来的时候两个if就可以了 求快速查找名字的算法
我感觉很简单啊 求快速查找名字的算法

#10


那你要是实在想不出来办法 又觉得list存不下,那你就放数据库里呗
比如 user表
张三 1.1
赵四 1.2
李六 1.3

不就一个sql语句的事吗?

#11


引用 7 楼 linhaiguo 的回复:
Quote: 引用 6 楼 bree06 的回复:

跟#4楼一样. 如果一定要将1~100和1000个名字扯上关系的话可以将1000个名字存在数组中. 然后根据随机数字算出下标就能取出名字了


假如不是分为1000等分,是分成10000等分,或者更多,这样数组就有可能存不下了。
如果是一个数字对应一个名字就没必要用数字了, 将名字排序后直接查找好了. 
还有一种做法是索引, 只需要使用65~90(A-Z)之间的数字, 每个数字对应的下标范围可以自己设定比如1000个, 那么数字N对应的下标就是(N-65)*1000~(N-64)*1000.  总共就可以存26*1000字名字.

你是想做抽奖么? 公司年会抽奖用? 不同用途设计思路不同. 抽奖你就按员工工号来就行不用这么麻烦, 

#12


散列表肯定是最快的,不过需要维护映射关系,1000个键值对
或者,因为键有规律,可以只维护值的线性表,然后随机查询(尽管较省空间但并不比散列表快)
如果内存不够用,可以考虑用redis

#1


1000等分也就是1000个名字,1-100只有100个数字,难不成还有小数么?1.1、1.2、1.3……这样?

#2


引用 1 楼 m2200 的回复:
1000等分也就是1000个名字,1-100只有100个数字,难不成还有小数么?1.1、1.2、1.3……这样?


对的,如何给一个数字,就能够快速查找到对应的名字

#3


数字和名字之间有什么转换规则么?有规则的话,直接根据规则转换最好,没有的话,你无法凭空给他们添加关联关系,key-value是比较好的方式。

#4


直接用数组,然后通过下标去找可以不

下标*10;

#5


可以像通讯录一样 将名字首字母提取出来 分组并搜索

#6


跟#4楼一样. 如果一定要将1~100和1000个名字扯上关系的话可以将1000个名字存在数组中. 然后根据随机数字算出下标就能取出名字了

#7


引用 6 楼 bree06 的回复:
跟#4楼一样. 如果一定要将1~100和1000个名字扯上关系的话可以将1000个名字存在数组中. 然后根据随机数字算出下标就能取出名字了


假如不是分为1000等分,是分成10000等分,或者更多,这样数组就有可能存不下了。

#8


1、首字母排序
2、二分查找

#9


比如说你有 100个数 1000个人 
创建一个list 每个下标存储一个10位的list不就可以快速查不来了吗?
如果10000,那就100位的list,就是存储的时候需要for循环
取出来的时候两个if就可以了 求快速查找名字的算法
我感觉很简单啊 求快速查找名字的算法

#10


那你要是实在想不出来办法 又觉得list存不下,那你就放数据库里呗
比如 user表
张三 1.1
赵四 1.2
李六 1.3

不就一个sql语句的事吗?

#11


引用 7 楼 linhaiguo 的回复:
Quote: 引用 6 楼 bree06 的回复:

跟#4楼一样. 如果一定要将1~100和1000个名字扯上关系的话可以将1000个名字存在数组中. 然后根据随机数字算出下标就能取出名字了


假如不是分为1000等分,是分成10000等分,或者更多,这样数组就有可能存不下了。
如果是一个数字对应一个名字就没必要用数字了, 将名字排序后直接查找好了. 
还有一种做法是索引, 只需要使用65~90(A-Z)之间的数字, 每个数字对应的下标范围可以自己设定比如1000个, 那么数字N对应的下标就是(N-65)*1000~(N-64)*1000.  总共就可以存26*1000字名字.

你是想做抽奖么? 公司年会抽奖用? 不同用途设计思路不同. 抽奖你就按员工工号来就行不用这么麻烦, 

#12


散列表肯定是最快的,不过需要维护映射关系,1000个键值对
或者,因为键有规律,可以只维护值的线性表,然后随机查询(尽管较省空间但并不比散列表快)
如果内存不够用,可以考虑用redis