@gsdev99

Как проверить массив на монотонность?

Всем привет, как проверить массив на монотонность?
В круглых скобках входные данные, далее результат.
// ([0, 1, 5, 9, 15]) => true
// ([0, 1, 1, 5, 9, 9, 15]) => true
// ([15, 8, 4, 2, 1]) => true
// ([0, 1, 5, 15, 4]) => false
  • Вопрос задан
  • 1292 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Посчитаем, сколько есть различных знаков разностей соседних элементов (текущий минус предыдущий). У монотонного массива если есть плюс, то нет минусов, и наоборот; возможно, присутствует ноль. У немонотонного есть и плюс, и минус, и тоже, возможно, ноль. Чтобы не путать случай +/- с +/0 и -/0, будем считать, что ноль присутствует всегда - у нулевого элемента предыдущего нет, так что для него и запишем нулевую разность. Таким образом, монотонный массив - это такой, у которого неполный комплект различных знаков разностей соседних элементов:

const isMonotone = arr =>
  arr.every(function(n, i, a) {
    return this.add(i && Math.sign(n - a[i - 1])).size < 3;
  }, new Set);
Ответ написан
Комментировать
RAX7
@RAX7
function check(arr) {
  let seqGrow = 0;
  for (let i = 1; i < arr.length; i++) {
    const pairGrow = Math.sign(arr[i] - arr[i - 1]);

    if (pairGrow === 0) {
      continue;
    }

    seqGrow = seqGrow || pairGrow;

    if (pairGrow !== seqGrow) {
      return false;
    }
  }
  return true;
}

console.log(check([0, 1, 5, 9, 15]));
console.log(check([0, 1, 1, 5, 9, 9, 15]));
console.log(check([15, 8, 4, 2, 1]));
console.log(check([0, 1, 5, 15, 4]));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы