Algorithm 跟踪数字状态的算法
要设计APIAlgorithm 跟踪数字状态的算法,algorithm,system-design,Algorithm,System Design,要设计API get(),它将返回随机数,并且该数字不应重复,这意味着它始终是唯一的 put(randomvalue),它将从get()中放回生成的随机数,如果放回,get()函数可以将此数重新用作输出 它必须是高效的,没有太多的资源被高度利用 有没有办法实现这个算法?不建议使用hashmap,因为如果此API生成数十亿个请求,保存生成的随机数仍然会占用太多空间 我无法计算出这个算法,请帮助给出一个线索,提前谢谢 如果没有额外的空间,我想不出任何解决方案。对于空格,一种选择是使用TreeMap,
get()
,它将返回随机数,并且该数字不应重复,这意味着它始终是唯一的put(randomvalue)
,它将从get()
中放回生成的随机数,如果放回,get()
函数可以将此数重新用作输出我无法计算出这个算法,请帮助给出一个线索,提前谢谢 如果没有额外的空间,我想不出任何解决方案。对于空格,一种选择是使用TreeMap,首先将TreeMap中的所有元素添加为false。访问元素时,将其标记为true。与put类似,将值更改为false。 下面的代码片段
public class RandomNumber {
public static final int SIZE = 100000;
public static Random rand;
public static TreeMap<Integer, Boolean> treeMap;
public RandomNumber() {
rand = new Random();
treeMap = new TreeMap<>();
}
static public int getRandom() {
while (true) {
int random = rand.nextInt(SIZE);
if (!treeMap.get(random)) {
treeMap.put(random, true);
return random;
}
}
}
static public void putRandom(int number) {
treeMap.put(number, false);
}
}
公共类随机数{
公共静态最终整数大小=100000;
公共静态随机变量;
公共静态树映射树映射;
公众号码(){
rand=新随机数();
treeMap=新的treeMap();
}
静态公共int getRandom(){
while(true){
int random=rand.nextInt(大小);
如果(!treeMap.get(random)){
树映射put(随机,真);
返回随机;
}
}
}
静态公共随机(整数){
树映射put(数字,假);
}
}
您使用的是哪种语言?您的努力是什么?如果您不使用映射或集合,如何确保一个数字不会生成两次?您可以尝试存储已在中选择的随机数(来自javadoc:此实现为基本操作(添加、删除和包含)提供有保证的日志(n)时间成本(
)。因此,它比HashMap
更节省时间和空间。这是一个考试题,还是类似的问题?出于实际目的,我看不出有什么理由需要put()
函数。只需忽略已过时的数字。使用句点为2^64的。即使每秒有10亿个get()。put()
请求是一个请求,请忽略它。你“可以重用这个号码”的说法并不意味着你“必须重用这个号码”。