@Showtin

Как решить задачу с массивом?

Помогите решить задачу с массивом.

Дан массив размера N. Найти количество его промежутков монотонности (то есть участков, на которых его элементы возрастают или убывают).

Пытался решить её но так и не вышло (не допер), но хочется увидеть хотябы пример её решения
  • Вопрос задан
  • 249 просмотров
Решения вопроса 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
<?php
$arr = [1,1,2,4,3,1,1,0,1,5,8,9,1,1,2];

$direction = null;
$counter = 0;
foreach($arr as $idx => $val)
{    
    if(!isset($arr[$idx-1]))
    {
         continue;
    }
    
    if($val > $arr[$idx-1])
    {
        if($direction != 'incr')
        {
             $direction = 'incr';
             $counter++;
        }
    }
    elseif($val < $arr[$idx-1])
    {
        if($direction != 'decr')
        {
             $direction = 'decr';
             $counter++;
        }
    }
    else
    {
        $direction = null;
    }
}

var_dump($counter); //int(6)
Ответ написан
Комментировать
@sagechild
программист php
Как еще один вариант.
$arr = [1, 1, 2, 4, 3, 1, 1, 0, 1, 5, 8, 9, 1, 1, 2];
$direction = null;
$last = null;
$countMonotony = array_reduce(
    $arr,
    function ($total, $item) use (&$direction, &$last) {
        if (is_numeric($last)) {
            if ($item > $last && $direction != 'up') {
                $total++;
                $direction = 'up';
            } elseif ($item < $last && $direction != 'down') {
                $total++;
                $direction = 'down';
            } elseif ($item == $last) {
                $direction = null;
            }
        }

        $last = $item;

        return $total;
    }
);

var_dump($countMonotony); // int(6)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы