从一个布尔数组中找到第i个布尔值,例如:数组是{true, true, false, false, true},该方法将输出int,显示第3个true值,即4。
我已经尝试过一些代码,它可以工作,但我需要使用递归,而不是while函数。
public static int check(int n, boolean[] b, boolean val){
int i = 0;
int count = 0;
while(i < b.length && count <= n){
if(b[i] == val) count++;
i++;
}
if(n == count){
return i;
}
else{
return -1;
}
}
实际函数从0开始计数,所以我在里面传递一个位置-1。如果i=0,那么很明显我们应该返回什么-第一个条目的索引。如果i大于0,假设它为1,那么我们将数组分为两部分:我们已经搜索过的包含第一个条目的部分,以及数组的其余部分。这可以使用subList()完成。现在我们可以在数组的其余部分使用函数i-1,它将在数组的第二部分中找到第一个条目的索引。
此外,我们还必须添加我们剪切的内容的大小,这将是列表。子列表(0,list.indexOf(value)1)。size()
这是记住原始数组中的索引所必需的。
public static void main(String[] args) {
List<Boolean> list = Arrays.asList(true, true, false, false, true, true, false, false); //8
int position = 4; //find index of fourth false
System.out.println(recursiveSearch(list, false, position - 1));
position = 2; //find index of second true
System.out.println(recursiveSearch(list, true, position - 1));
}
private static int recursiveSearch(List<Boolean> list, boolean value, int i) {
if(i == 0) {
return list.indexOf(value);
} else {
return list.subList(0, list.indexOf(value) + 1).size() + recursiveSearch(list.subList(list.indexOf(value) + 1, list.size()), value, i - 1);
}
}
public class Recursion {
private static boolean[] b = {true, true , false, false, true};
private static int i = 0;
private static int position = 0;
public static void check( int i, boolean[] b, boolean val ) {
if( i < b.length ) {
if( b[i] == val ) {
position = i;
}
i++;
check( i, b, val );
}
}
public static void main(String[] args) {
boolean myChoice = true;
check( Recursion.i, Recursion.b, myChoice );
System.out.println( "Last " + myChoice + " position computed is " + position );
}
}
递归是关于调用自己的方法。在上面的示例中,该方法检查计数器变量i是否小于布尔数组的长度。随后检查数组的当前元素是否与所选内容匹配。如果是,则将计数器值分配给位置(最后计算的位置)。计数器递增,方法调用自身。
该过程继续,直到i等于布尔数组的大小。此时,方法停止调用自身。
您可以这样做:
int f(int n,boolean[] b,boolean val,int i)
{
if(i>=b.length)
return -1;
if(b[i]==val)
{
if(n==1)
return i;
else
return f(n-1,b,val,i+1);
}
return f(n,b,val,i+1);
}
问题内容: 我想知道是否有一种已知的,内置的/优雅的方法来找到匹配给定条件的JS数组的第一个元素。AC#等效项为List.Find。 到目前为止,我一直在使用这样的两功能组合: 然后我可以使用: 但是,既然ECMAScript中有[太多的函数式数组方法,也许已经有这样的东西了?我想很多人必须一直执行这样的事情… 问题答案: 从ES6开始,存在数组的本机方法。一旦找到第一个匹配项并返回值,此操作将停
我想知道是否有一种已知的、内置的/优雅的方法来查找匹配给定条件的JS数组的第一个元素。C#的等价物将是list.find。 到目前为止,我一直在使用这样的两个功能组合: 然后我可以使用: 但是由于ECMAScript中有这么多函数式数组方法,也许已经有类似的东西了?我想很多人都要一直在做这样的事情...
问题内容: 我想找到小于或等于n的第k个根的最大整数。我试过了 但是对于n = 125,k = 3,这给出了错误的答案!我碰巧知道5的立方是125。 有什么更好的算法? 背景:在2011年,这次滑坡使我击败了Google Code Jam。https://code.google.com/codejam/contest/dashboard?c=1150486#s=p2 问题答案: 一个解决方案首先通
没有循环或辅助方法,我需要检查arr[i...arr.length-1]是否有一个等于diff的两段和,例如我有:diff=1, i=2, arr={3, 4, 1, 1, 2, 0, 1, 1, 3}它返回true,因为总和{1,1,2,0}(4)减去总和{1,1,3}(5)等于diff(1)。我试图想办法甚至没有循环的总和arr,我唯一想到的是将其添加到diff,但后来我失去了我原来的diff
问题内容: 我想创建以下查询的等效项- 我使用必须和应该尝试了布尔查询的不同组合,但似乎没有任何效果。能做到吗? 问题答案: 这样的事情怎么样:
假设我有整数0到100的数据帧。我想把这些值分为3部分,低、中、高,低小于33,高大于66,中介于33和66之间。所以我用 我得到了一个错误 我已经尝试过if-else语句和以及其他操作符。低和高起作用,但中间不起作用。 请问我能知道附近的路吗?