Проверка массива на монотонность

Проверяйте одновременно неубывание и невозрастание. Если оба свойства нарушились, массив немонотонный; равные соседние элементы допустимы.

Короткий ответ

Что ответить на собеседовании

Проверяйте одновременно неубывание и невозрастание. Если оба свойства нарушились, массив немонотонный; равные соседние элементы допустимы.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте функцию, которая получает массив чисел и определяет, сохраняет ли он одно направление (неубывающий или невозрастающий). Функция должна вернуть true, если массив монотонный, и false в противном случае.

function isMonotonic(arr) {
    // your code here
}

isMonotonic([1, 2, 3, 6]); // true  
isMonotonic([6, 3, 3, 2, 1]); // true  
isMonotonic([1, 1, 1]); // true  
isMonotonic([1, 10, 6]); // false

Ответ

Проверяйте одновременно неубывание и невозрастание. Если оба свойства нарушились, массив немонотонный; равные соседние элементы допустимы.

function isMonotonic(arr) {
  let increasing = true, decreasing = true;
  for (let i = 0; i < arr.length; i++) {
    if (typeof arr[i] !== 'number' || Number.isNaN(arr[i])) return false;
    if (i === 0) continue;
    if (arr[i] < arr[i - 1]) increasing = false;
    if (arr[i] > arr[i - 1]) decreasing = false;
    if (!increasing && !decreasing) return false;
  }
  return true;
}

Пустой массив и один элемент считаются монотонными. Проверка занимает O(n) времени и O(1) дополнительной памяти; NaN здесь явно отвергается.

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

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

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

Подробнее