[3, -2, -1, 5, 6,7, -9, 0, 1, 2, 3, 5, 7]
Ответ на этот вопрос, похоже, -8
, учитывая тот факт, что мы учитываем отрицательные числа и ищем следующее последовательное пропущенное число.
Мое решение ниже учитывает отрицательные числа, но если вам нужны только положительные значения, нетрудно добавить простые if
проверки.
Фрагмент:
import java.util.*;
class MyClass {
public static void main(String args[]) {
System.out.println(solve(new int[]{3, -2, -1, 5, 6,7, -9, 0, 1,2,3,5,7}));
}
private static int solve(int[] arr){
Set<Integer> set = new HashSet<>();
int minimum = arr[0];
for(int x : arr){
set.add(x);
if(minimum > x) minimum = x;
}
int find_missing_num = minimum - 1; // just to compare with a base value.
for(int x : arr){
if(!set.contains(x-1)){
if(find_missing_num == minimum - 1 && (x-1) != minimum - 1 || find_missing_num > x - 1) find_missing_num = x - 1;
}
if(!set.contains(x+1)){
if(find_missing_num == minimum - 1 && (x+1) != minimum - 1 || find_missing_num > x + 1) find_missing_num = x + 1;
}
}
return find_missing_num;
}
}
Демонстрация: https://ideone.com/KPoiXR
Алгоритм:
- Сначала создайте
Set
и добавьте все значения массива в набор. - Во-вторых, снова выполните итерацию по массиву и проверьте наличие
array_element - 1
и array_element + 1
. - Если мы не найдем их, мы соответствующим образом обновим
find_missing_num
в нашем коде. - Сложность времени: O (n), Сложность пространства: O (n), где
n
- размер массива.
Чтобы найти первый отсутствующий положительный результат (а также игнорируя все отрицательные числа в массиве):
import java.util.*;
class MyClass {
public static void main(String args[]) {
//System.out.println(solve(new int[]{3, -2, -1, 5, 6,7, -9, 0, 1,2,3,5,7}));
System.out.println(solve(new int[]{-1,0,2,3}));
}
private static int solve(int[] arr){
Set<Integer> set = new HashSet<>();
int minimum = -1;
for(int x : arr){
if(x > -1){
set.add(x);
if(minimum > x) minimum = x;
}
}
if(!set.contains(1)) return 1;
int find_missing_num = - 1; // just to compare with a base value.
for(int x : arr){
if(x > -1){
if(x-1 > 0 && !set.contains(x-1)){
if(find_missing_num == -1 || find_missing_num > x - 1) find_missing_num = x - 1;
}
if(!set.contains(x+1)){
if(find_missing_num == -1 || find_missing_num > x + 1) find_missing_num = x + 1;
}
}
}
return find_missing_num;
}
}
* 1 050 *
Демо: https://ideone.com/0gwugF