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
值,该值指示数组中需要多少空的相邻点int中的值
String[]arr={“greg”,null,null,“adam”,null,“phil”,null,null}代码>如果我想找到两个空座位的街区:
publicstaticintgetindex(arr,2){…}
应返回positionarr[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我想这是一个约束,输入至少