Java 快速生成随机列元素的方法

Java 快速生成随机列元素的方法,java,algorithm,actionscript-3,random,Java,Algorithm,Actionscript 3,Random,我有一个简单的问题,我需要一个快速的方法来实现。 假设我有两列,比如 1 6 3 5 5 3 如您所见,元素3和5在第二列中,我想在第一列中生成一个新的随机元素,这样第二列中就不会有匹配的元素。元素可以是1->12 我的方法是:我将第2列中的所有元素添加到一个散列集中,然后搜索第1列中的元素,并检查它们是否在散列集中,如果是这样,尝试生成一个新的随机元素 我还有另一个想法,将问题可视化为一维数组,删除重复项等等,但我不想修改第二个数组中的任何元素 将列2值放入HashSet 只需使用(Ma

我有一个简单的问题,我需要一个快速的方法来实现。 假设我有两列,比如

1 6 
3 5
5 3 
如您所见,元素3和5在第二列中,我想在第一列中生成一个新的随机元素,这样第二列中就不会有匹配的元素。元素可以是1->12

我的方法是:我将第2列中的所有元素添加到一个散列集中,然后搜索第1列中的元素,并检查它们是否在散列集中,如果是这样,尝试生成一个新的随机元素

我还有另一个想法,将问题可视化为一维数组,删除重复项等等,但我不想修改第二个数组中的任何元素

  • 列2
    值放入
    HashSet

  • 只需使用
    (Math.random()*12)+1
    ,它将生成从1到12的数字

  • 现在搜索生成的数字是否存在于
    set
    中(如果存在于
    set
    中),然后重新生成,即转到步骤2,否则完成

  • 希望能有帮助

    编辑

    O(1)

    我只取了一个小样本,即5个

  • 首先创建一个数组,该数组包含比
    a[]={1,2,3,4,5}
  • 现在尝试生成一个从1到5的随机数(这里您正在生成数组的索引),假设它生成2,然后将最后一个元素替换为2。现在数组将是[]={1,5,3,4},并减小索引值
  • 现在您必须生成一个从1到4的随机数。让我们假设3比交换3和最后一个值。所以数组是{1,5,4}。减小索引,即现在为3

  • 我认为这是一个相当直截了当的解决办法

        Random r = new Random();
        List<Integer> numbers = new ArrayList<>(Arrays.asList(new Integer[] {
                1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }));
    
        Integer[] colOne = new Integer[] { 6, 5, 3 };
        numbers.removeAll(Arrays.asList(colOne));
    
        int notFoundInColOne = numbers.get(r.nextInt(numbers.size()));
    
    Random r=new Random();
    列表编号=新的ArrayList(Arrays.asList(新整数[]){
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }));
    整数[]冒号=新整数[]{6,5,3};
    numbers.removeAll(Arrays.asList(colOne));
    int-notFoundInColOne=numbers.get(r.nextInt(numbers.size());
    

    基本上,我们创建范围,删除范围中也在列中的元素,然后从范围中剩余的元素中选择一个随机元素。

    我认为这种方法对您有效:对于从1到12的每个数字,如果数字不在列2中,则将其添加到列表中。列1未填充时,从列表中随机选择一个项目并将其删除,然后将其添加到列1。

    您可以使用以下步骤: 1.创建一个数组。 2.用最小值填充到最大值。 3.让阵势弥漫。按顺序读取数组


    将Fisher–Yates shuffle算法用于suffle

    为什么当第二列有重复的数字时,您的方法会失败?因此您希望第1列中的数据永远不会出现在第2列中?如果第1列中有重复的数字,该怎么办。有什么问题吗?因为您需要再次进行另一个循环,以检查所选的随机数是否再次出现在集合中,这就增加了第二种方法的总体复杂性,如何确保第二列中没有重复的元素?@AhmedSaleh上面的代码总是生成从1到5的唯一数字。一点也不重复。对于第二列,它们应该是唯一的,但不是它们自己。