분할 및 정복 기술을 사용하는 Java 알고리즘을 작성해야합니다. n 개의 int 요소가있는 배열 V가 주어진 경우 알고리즘은 두 개의 연속적인 숫자이 나타나는 횟수를 계산해야합니다.자바에서 나누기 및 정복 알고리즘
예 : 알고리즘이 V = [3, 0, 0, 1, 0, 1, 3, 2, 0, 0, 0, 1, 2]
인 경우 알고리즘은 3을 반환해야합니다. 0, 0, 0은 2 쌍의 연속 0을 갖는 것에 해당합니다.
아래 프로그램을 작성했지만 실행하면 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;
}
}
}
사용 디버거 밖으로 찾을 수 있습니다. 또한 변수에 의미있는 이름을 붙여 자신을 비롯한 모든 독자를 돕고 코드를 이해합니다. –
어떤 라인에서 예외가 발생합니까? –
if ((m