В реализации есть повторяющаяся проверка: Второй блок if
такой же, как и первый блок if
.
public boolean checkQueens_v1(int x1, int y1, int x2, int y2) {
if ( (x1 == x2) || (y1 == y2) ) {
return true;
} else if ( Math.abs(x1 - x2) == Math.abs(y1 - y2) ) {
return true;
} else{
return false;
}
}
Альтернатива:
public boolean checkQueens_v2(int x1, int y1, int x2, int y2) {
int xdiff = x1 - x2;
if ( xdiff == 0 ) {
return true;
}
int ydiff = y1 - y2;
if ( ydiff == 0 ) {
return true;
}
if ( Math.abs(xdiff) == Math.abs(ydiff) ) {
return true;
}
return false;
}
Что меньше / быстрее, сказать сложно:
Первый тест состоит из трех сравнений и двух вычитаний. Второй тест имеет два сравнения с нулем, одно сравнение и два вычитания.
Но второй тест выполняет свои вычитания чаще, чем первый тест.