Java 在字符串数组中查找n个空的相邻位置

Java 在字符串数组中查找n个空的相邻位置,java,arrays,string,algorithm,Java,Arrays,String,Algorithm,我正在设计一个程序,将给定数量的字符串并排存储在一个部分填充的数组中。 我在创建执行以下操作的算法时遇到困难: 接收一个字符串数组和一个int值,该值指示数组中需要多少空的相邻点 在数组中搜索以查找该大小的不同空白点块 随机选取其中一个空块的起始索引 返回(3)-int中的值 下面是一个它应该如何工作的示例。 给定String[]arr={“greg”,null,null,“adam”,null,“phil”,null,null}如果我想找到两个空座位的街区: publicstaticintge

我正在设计一个程序,将给定数量的字符串并排存储在一个部分填充的数组中。 我在创建执行以下操作的算法时遇到困难:

  • 接收一个字符串数组和一个
    int
    值,该值指示数组中需要多少空的相邻点
  • 在数组中搜索以查找该大小的不同空白点块
  • 随机选取其中一个空块的起始索引
  • 返回(3)-
    int中的值
  • 下面是一个它应该如何工作的示例。 给定
    String[]arr={“greg”,null,null,“adam”,null,“phil”,null,null}如果我想找到两个空座位的街区:
    
    publicstaticintgetindex(arr,2){…}
    应返回position
    arr[1]
    arr[6]


    请告诉我如何解决这个问题?

    这可以很简单地解决:

    List<Integer> pos = new ArrayList<>();
    
    int len = 0;
    for(int i = 0 ; i < arr.length ; i++)
        if(s == null)
            len++;
        else
            len = 0;
    
        if(len >= min_len)
            pos.add(i - min_len + 1);
    
    return pos.get(new Random().nextInt(pos.size()));
    
    List pos=new ArrayList();
    int len=0;
    对于(int i=0;i=最小长度)
    位置添加(i-最小长度+1);
    返回pos.get(new Random().nextInt(pos.size());
    
    这可以很简单地解决:

    List<Integer> pos = new ArrayList<>();
    
    int len = 0;
    for(int i = 0 ; i < arr.length ; i++)
        if(s == null)
            len++;
        else
            len = 0;
    
        if(len >= min_len)
            pos.add(i - min_len + 1);
    
    return pos.get(new Random().nextInt(pos.size()));
    
    List pos=new ArrayList();
    int len=0;
    对于(int i=0;i=最小长度)
    位置添加(i-最小长度+1);
    返回pos.get(new Random().nextInt(pos.size());
    
    这可以很简单地解决:

    List<Integer> pos = new ArrayList<>();
    
    int len = 0;
    for(int i = 0 ; i < arr.length ; i++)
        if(s == null)
            len++;
        else
            len = 0;
    
        if(len >= min_len)
            pos.add(i - min_len + 1);
    
    return pos.get(new Random().nextInt(pos.size()));
    
    List pos=new ArrayList();
    int len=0;
    对于(int i=0;i=最小长度)
    位置添加(i-最小长度+1);
    返回pos.get(new Random().nextInt(pos.size());
    
    这可以很简单地解决:

    List<Integer> pos = new ArrayList<>();
    
    int len = 0;
    for(int i = 0 ; i < arr.length ; i++)
        if(s == null)
            len++;
        else
            len = 0;
    
        if(len >= min_len)
            pos.add(i - min_len + 1);
    
    return pos.get(new Random().nextInt(pos.size()));
    
    List pos=new ArrayList();
    int len=0;
    对于(int i=0;i=最小长度)
    位置添加(i-最小长度+1);
    返回pos.get(new Random().nextInt(pos.size());
    


    在阵列中循环,当您找到一个空插槽时,从那里开始另一个循环,以检查是否需要“运行”空插槽。如果是,请返回起始索引。注意这是O(n^2),我不知道是否存在更好的解决方案。我宁愿不为你写代码。这不是我们要做的。我认为可以在
    O(n)
    中通过计算
    null
    s组(比如,保留一个起始索引和长度列表),然后从那里计算出什么索引开始一个适当的长度块(这被保存到一个索引数组中)。最后,从这个数组中随机选择。@Shapiroyacov如何选择?请elaborate@Paul让它在阵列中定位onLoop,当您找到一个空插槽时,从那里开始启动另一个循环,以检查空插槽的“运行”是否是您所需要的。如果是,请返回起始索引。注意这是O(n^2),我不知道是否存在更好的解决方案。我宁愿不为你写代码。这不是我们要做的。我认为可以在
    O(n)
    中通过计算
    null
    s组(比如,保留一个起始索引和长度列表),然后从那里计算出什么索引开始一个适当的长度块(这被保存到一个索引数组中)。最后,从这个数组中随机选择。@Shapiroyacov如何选择?请elaborate@Paul让它在阵列中定位onLoop,当您找到一个空插槽时,从那里开始启动另一个循环,以检查空插槽的“运行”是否是您所需要的。如果是,请返回起始索引。注意这是O(n^2),我不知道是否存在更好的解决方案。我宁愿不为你写代码。这不是我们要做的。我认为可以在
    O(n)
    中通过计算
    null
    s组(比如,保留一个起始索引和长度列表),然后从那里计算出什么索引开始一个适当的长度块(这被保存到一个索引数组中)。最后,从这个数组中随机选择。@Shapiroyacov如何选择?请elaborate@Paul让它在阵列中定位onLoop,当您找到一个空插槽时,从那里开始启动另一个循环,以检查空插槽的“运行”是否是您所需要的。如果是,请返回起始索引。注意这是O(n^2),我不知道是否存在更好的解决方案。我宁愿不为你写代码。这不是我们要做的。我认为可以在
    O(n)
    中通过计算
    null
    s组(比如,保留一个起始索引和长度列表),然后从那里计算出什么索引开始一个适当的长度块(这被保存到一个索引数组中)。最后,从这个数组中随机选择。@Shapiroyacov如何选择?请elaborate@Paul它是否使用我在问题中发布的数组对其进行了测试,并不断返回索引0或5。请测试我在返回值中添加了一个,它工作正常。thanks@i_use_the_internet哦,对了,sry。我的思想有点逻辑错误。我将纠正这一点,因此,如果有一个实例中没有“n”null块,该怎么办。假设我们用完了两个空的块,我如何修改代码,使默认返回值为-1而不引起异常?@i_使用_互联网我认为输入至少有一个
    n
    空的块是一个约束。只需在末尾添加一个条件:
    return(pos.isEmpty()?-1:pos.get(…)我用我在问题中发布的数组测试了它,它总是返回索引0或5。请测试我在返回值中添加了一个,它工作正常。thanks@i_use_the_internet哦,对了,sry。我的思想有点逻辑错误。我将纠正这一点,因此,如果有一个实例中没有“n”null块,该怎么办。假设我们用完了两个空的块,我如何修改代码,使默认返回值为-1而不引起异常?@i_use__the_interneth我想这是一个约束,输入至少