Loc*_*Loc 1 java random algorithm
这是我的尝试:
public static void main(String[] args) {
// Max 100_000
System.out.println(Arrays.toString(randomFour(100_000)));
}
public static int[] randomFour(int max) {
Random r = new Random();
int[] four = new int[4];
for (int i = 0; i < 4; i++) {
while (true) {
// Random from 1 to max
four[i] = 1 + (int) (r.nextFloat() * max);
boolean dup = false; // check j: 0 -> i-1
for (int j = 0; j < i; j++) {
if (four[j] == four[i]) {
dup = true;
break;
}
}
if (dup == false) {
break;
}
}
}
return four;
}
Run Code Online (Sandbox Code Playgroud)
此实现工作正常。是否有更好的算法来解决此问题(既耗时又耗费内存),尤其是对于很大的最大值?谢谢!
如果我理解正确,则希望有一个由4个不同的随机整数组成的数组,该数组在1到100_000(含)之间。
这是一种简洁的最终表达方式
int[] four = ThreadLocalRandom.current()
.ints(1, 100_001) // 1 is inclusive, 100_001 is exclusive
.distinct()
.limit(4)
.toArray();
Run Code Online (Sandbox Code Playgroud)