Проверяйте одновременно неубывание и невозрастание. Если оба свойства нарушились, массив немонотонный; равные соседние элементы допустимы.
Проверка массива на монотонность
Проверяйте одновременно неубывание и невозрастание. Если оба свойства нарушились, массив немонотонный; равные соседние элементы допустимы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте функцию, которая получает массив чисел и определяет, сохраняет ли он одно направление (неубывающий или невозрастающий). Функция должна вернуть 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 здесь явно отвергается.