我需要在一定范围内生成很多随机数,但有一些例外。目前我的计划是按照以下方式进行:
在我的情况中,“except”和“randomNums”的大小会更大。所以,代码将花费更多的时间在while循环中来避免我不想要的数字。
我很好奇是否可以加速我的代码?如果我能够移除while循环,那么它肯定就是O(n)。但是我该如何做到这一点呢? 谢谢。
public class Main
{
static List<Integer> except = Arrays.asList(5, 6, 11, 12, 17, 18, 23, 25, 28, 29);
public static void main(String[] args) {
List<Integer> randomNums = new ArrayList<>();
Random random = new Random();
int z;
for(i=0; i<20; i++) {
z = random.nextInt(30);
while(except.contains(z)) z = random.nextInt(30);
randomNums.add(z);
}
System.out.println(randomNums);
}
}
在我的情况中,“except”和“randomNums”的大小会更大。所以,代码将花费更多的时间在while循环中来避免我不想要的数字。
我很好奇是否可以加速我的代码?如果我能够移除while循环,那么它肯定就是O(n)。但是我该如何做到这一点呢? 谢谢。
except
中使用Set而不是List。这样,contains()
方法的时间复杂度将从O(n)变为O(1)。 - vanje