За один проход отслеживайте, сохраняется ли неубывание и невозрастание. Если оба признака стали ложными, массив немонотонен; равные элементы не нарушают ни одно направление.
Проверка массива на монотонность (Is Monotonic)
За один проход отслеживайте, сохраняется ли неубывание и невозрастание. Если оба признака стали ложными, массив немонотонен; равные элементы не нарушают ни одно направление.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Проверка массива на монотонность (Is Monotonic)
Условие:
Реализуйте функцию isMonotonic(numbers), которая принимает массив чисел и определяет, является ли он монотонным — то есть либо полностью не убывающим (каждый следующий элемент больше или равен предыдущему), либо полностью не возрастающим (каждый следующий элемент меньше или равен предыдущему).
Входные данные: numbers — массив целых или вещественных чисел, длина от 0 до 10^5.
Выходные данные: true, если массив монотонный (не убывает ИЛИ не возрастает на всём протяжении), иначе false.
Ограничения:
- 0 ≤ numbers.length ≤ 10^5
- -10^9 ≤ numbers[i] ≤ 10^9
- Массивы длиной 0 или 1 считаются монотонными по умолчанию.
Код для реализации:
# Доступно без импорта: json, sys, io
def is_monotonic(numbers):
# TODO: напишите решение здесь
return True
Ответ
За один проход отслеживайте, сохраняется ли неубывание и невозрастание. Если оба признака стали ложными, массив немонотонен; равные элементы не нарушают ни одно направление.
def is_monotonic(numbers):
nondecreasing = nonincreasing = True
for i in range(1, len(numbers)):
if numbers[i] < numbers[i - 1]:
nondecreasing = False
if numbers[i] > numbers[i - 1]:
nonincreasing = False
if not nondecreasing and not nonincreasing:
return False
return True
Пустой массив и один элемент возвращают True, как требует условие. Сложность O(n) по времени и O(1) по дополнительной памяти; срезы и сортировка не нужны.