java - 对于列表中的每个元素,选择该元素和 3 个随机非重复元素

标签 java algorithm random permutation

我有一个大小为 202 且整数为 0...201 的列表。我需要迭代这个列表,对于每个元素,我需要选择 4 个元素,其中一个是当前元素,其余 3 个是随机的、不重复的元素。

例如,

在第一次迭代时,我需要生成 [0, r1, r2, r3],其中 r1, r2, r3 是 1-201 之间的不同随机数;

在第二次迭代时,我需要生成 [1, r1, r2, r3],其中 r1, r2, r3 是 0, 2-201 之间的不同随机数;

在第三次迭代时,我需要生成 [2, r1, r2, r3],其中 r1, r2, r3 是 0-1, 3-201 之间的不同随机数;

我知道一种方法来做到这一点,但它需要太多的时间和空间,因为我将在 Android 应用程序的主线程中执行此操作,所以我可能应该做一些更有效的事情。

最佳答案

通过删除冗余过滤来改进 Miroslav 的方法:

List<Integer> integerList = new ArrayList<>();
for(int i = 0; i < 202; i++) {
    integerList.add(i);
}
List<Integer> exclusionList = new ArrayList<>();
exclusionList.addAll(integerList);
for(int element : integerList){
    exclusionList.remove(element);
    Collections.shuffle(exclusionList);
    System.out.println(element + ", " + exclusionList.subList(0, 3));
    exclusionList.add(element);
}

关于java - 对于列表中的每个元素,选择该元素和 3 个随机非重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46102651/

相关文章:

java - 如何更新 Vaadin 网格上的项目而不显式放置所有字段?

java - 爱普生打印机如何设置打印机可打印区域?

java - 碰撞时改变球的颜色

java - 如何测试文件提取

java - 在 Java 中对模式使用循环的不同变体

algorithm - 列出总和为常量数字的所有可能数字组合的快速方法

algorithm - 在加权二维数组中围绕目标的最短路径

algorithm - 从四个整数生成无状态伪随机数

algorithm - 动态偏向随机选择算法

matlab中bat算法的java版