두 개의 정렬 된 배열에서 공통 요소를 계산하려면 다음 Java 함수가 있어야합니다. 물음표가있는 줄을 기록하십시오. 분명히 불필요한 조건으로 코드가 더 빠릅니까?
public static int overlap(int[] a, int[] b)
{
int i = 0, j = 0;
int res = 0;
while(i < a.length && j < b.length)
{
if(a[i] > b[j])
j ++;
else if(a[i] < b[j])
i ++;
else if(a[i] == b[j]) // ?
{
res ++;
i ++;
j ++;
}
}
return res;
}
, 마지막 경우 문이있을 필요가 없습니다 : 그 시점에서 우리는 두 개의 값이 같은 것을 알고있다. 그러나 속도를 테스트 할 때 (나는 수표의 순서가 어떤 차이가 있는지 확인하고 있었다), 불필요한 수표를 사용한 방법은없는 것보다 항상 빠르다 (때로는 2 배).
여기에 무슨 일이 일어나고 있습니까? 신비한 최적화? 나는 명백한 것을 간과하고 있는가? 나는 스탠드 컴파일러, 버전 1.8을 사용하고있다. 나는 바이트 코드를 읽을 수 없으므로, 두포에서 무슨 일이 일어나고 있는지 모른다. 여기
은 전체 테스트 클래스입니다 : https://gist.github.com/pbloem/1523283211454ec58ce9c5b45204eebd바이트 코드 :의 https://gist.github.com/pbloem/ce4f6758f0bb1424c155c26e83ca88a1
언어를 태그하면 도움이 될 것이라고 생각합니다. 그것은 나에게 자바처럼 보인다. –
@HorseFace 실수로 태그를 제거해야합니다. 감사. – Peter
_ 관련 _ 관련 : [지점 예측] (http://stackoverflow.com/questions/11227809/why-is-it-faster-to-process-a-sorted-array-than-an-unsorted-array) – noahnu