Проверка массива на монотонность (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 = True
    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). По условию числа находятся в заданном диапазоне; отдельную политику для NaN пришлось бы определить дополнительно.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее