我必须用 Java 编写一个使用分而治之技术的算法。给定一个包含 n 个 int 元素的数组 V,算法应该计算两个连续 0 出现的次数。
示例:如果V = [3, 0, 0, 1, 0, 1, 3, 2, 0, 0, 0, 1, 2]
,则算法应返回 3,注意 0、0、0 对应于具有 2 对连续零。
我已经编写了如下程序,但是当我运行它时,它给了我一个ArrayIndexOutOfBoundsException
. 我究竟做错了什么 ?
public class Test {
public static void main(String[] args){
int[] v = {3, 0, 0, 1, 0, 1, 3, 2, 0, 0, 0, 1, 2};
System.out.println(Conta_Zeri_Main(v));
}
public static int Conta_Zeri_Main(int[] v){
if (v.length == 0 || v.length == 1)
return 0;
else
return Conta_Zeri(v, 1, v.length);
}
public static int Conta_Zeri(int[] v, int i, int f){
int m,result,sx,dx;
if (i >= f)
return 0;
else{
m = (i + f)/2;
sx = Conta_Zeri(v, i, m);
dx = Conta_Zeri(v, m+1, f);
result = sx + dx;
if ((v[m] == v[m+1]) && (v[m] == 0))
result++;
return result;
}
}
}