Если требуются соседние элементы, возрастающие на единицу, достаточно считать длину текущей серии и вернуть true при достижении трёх. Время O(n), память O(1).
// Задача: Написать метод, который будет возвращать true,
Если требуются соседние элементы, возрастающие на единицу, достаточно считать длину текущей серии и вернуть true при достижении трёх. Время O(n), память O(1).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
// Задача: Написать метод, который будет возвращать true, // если поданный на вход массив int содержит 3 и более // последовательных числа в любом месте. // Например: // someMethod([2, 4, 5, 6, 2]) -> true // someMethod([0, 22, 23, 24, 29]) -> true // someMethod([1, 2, 3, 4]) -> true // someMethod([1, 2, 4]) -> false
Ответ
Если требуются соседние элементы, возрастающие на единицу, достаточно считать длину текущей серии и вернуть true при достижении трёх. Время O(n), память O(1).
Для Java:
static boolean someMethod(int[] nums) {
if (nums == null || nums.length < 3) return false;
int run = 1;
for (int i = 1; i < nums.length; i++) {
run = (long) nums[i] == (long) nums[i - 1] + 1
? run + 1 : 1;
if (run >= 3) return true;
}
return false;
}
Преобразование в long предотвращает переполнение при прибавлении к максимальному int. Здесь последовательность обязана занимать соседние позиции; если разрешён произвольный порядок элементов, требуется другое условие и алгоритм.