У меня есть код для «Найти недостающее целое число» в Codility
public static int solution(int[] A) {
ArrayList<Integer> a = new ArrayList<Integer>();
for(int i=0; i<A.length; i++) if(A[i] >= 0) a.add(A[i]);
if(a.isEmpty()) {
return 1;
}
a.sort(null);
if(a.get(0) > 1) {
return 1;
}
for(int i=0; i<a.size()-1; i++) {
if(a.get(i) != a.get(i+1) && a.get(i)+1 != a.get(i+1)) {
return a.get(i)+1;
}
}
return a.get(a.size()-1)+1;
}
Этот код работает для всех, кроме тестов производительности - large_1.
Это дает мне ошибку «получил 233 ожидается 40000 ".
Когда я заменяю этот код:
if(a.get(i) != a.get(i+1) && a.get(i)+1 != a.get(i+1))
return a.get(i) +1;
на
int a1 = a.get(i);
int a2 = a.get(i+1);
if(a1 != a2 && a1 +1 != a2) return a.get(i) +1;
или
int sub = a.get(i+1) - a.get(i);
if(sub != 0 && sub != 1) return a.get(i) +1;
, ошибок нет (Я получил оценку 100/100 при замене этой строки)
Есть ли кто-нибудь, кто может объяснить разницу?
Мне они кажутся одинаковыми.