0이 아닌 값을 포함 할 것으로 예상되는 행/열의 수에 따라 다릅니다. 1000x1000 격자에 < 개의 100 개의 위치가 채워질 것으로 예상되는 경우 값을 생성하는 동안 어떤 행 & 열의 정보를 저장해야합니다.
만약이 같은 그게 전부가 아니라 옵션 사용 뭔가를해야만 :
이
public void foo() {
int[][]matrix = new int[1000][1000];
int x = 0,y = 0;
if(matrix[x][y] != 0) return;
int min = 0, max=0;
boolean cont = true;
foreverloop:
while(cont) {
min--;max++;
for(int ii = min; ii < max; ii++) {
// secure that min and max dont exeed matrix here.
cont = false;
int[] higherEnd = Arrays.copyOf(matrix[ii], max);
int[] trunk = Arrays.copyOf(higherEnd, higherEnd.length-min);
Arrays.sort(trunk);
if(trunk[trunk.length-1] != 0) {
// HIT! we search this distance but no further.
trunk = Arrays.copyOf(higherEnd, higherEnd.length-min);
int source = trunk.length;
for(int distance = 0; ;distance++) {
if(source-distance>0) {
if(trunk[source-distance] != 0) {
// SCORE!
scoreHit(x+ii,y+source-distance);
break foreverloop;
}
}
if(source+distance<trunk.length) {
if(trunk[source+distance] != 0) {
// SCORE!
scoreHit(x+ii,y+source-distance);
break foreverloop;
}
}
}
}
}
}
}
public void scoreHit(int x, int y) {
// there could be several in nearly the same distances
}
당신은 이미 검색 영역을 필터링하여 해당을 최적화 할 수 있습니다,하지만 난 그는 X, Y에서 높은 거리에서 차이를 만들 것이라고 생각