Пропускать указанное c число в массиве при просмотре, находится ли массив в порядке убывания - PullRequest
0 голосов
/ 08 апреля 2020

Для назначения в колледж мне нужно посмотреть, есть ли в массиве каждый номер ниже предыдущего. Если число в массиве - 142, мне нужно пропустить это число и проверить следующее. Мой текущий код, который работает примерно для 90% тестовых случаев, таков:

boolean decreasingExcept2(int[] nums) {
    boolean decending = true;

    for (int i = 0; i < nums.length - 1; ++i) {
        if ((nums[i] != 142) && (nums[i + 1] != 142) && (nums[i] <= nums[i + 1])) {
            decending = false;
        }

    }

    return decending;
}

Проблема возникает из тестовых случаев, когда между двумя числами существует 142, которые должны сделать тестовый случай ложным. Этот код оставляет такие массивы истинными. Таким образом, массивы типа [3, 142, 4] или [3, 142, 142, 3, 0] отправляются обратно в true, когда они ложны. Как мне получить его для сравнения чисел, разделенных 142?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Надеюсь, вы поняли, что не можете сравнить соседние значения в массиве из-за возможности встретить серию из одного или нескольких промежуточных 142 значений.

Общая идея состоит в том, чтобы запомнить последнее не-142 значение, которое вы видели (prev), и когда вы встретите последующее не-142 значение, сравните его с prev.

* 1006. * Конечно, есть сложности, когда массив начинается с 142 значений. Кроме того, вам нужно быть осторожным, когда вы обновляете значение prev.

. Вот ваш подход в коде, которому вы должны следовать:

  1. Инициализируйте prev значение в индексах 0 и l oop от индекса 1 до остальной части массива
  2. Если current равно 142, вы не можете сравнить его с prev, и вы не должны обновлять prev до current
  3. Если current - это не 142, а prev, вы не можете сравнить их. Но вы должны обновить prev до current.
  4. Если ни prev, ни current не равны 142, вы можете сравнить их и вернуть false, если они не уменьшаются. Если они уменьшаются, вам нужно обновить prev до current, прежде чем продолжить.
0 голосов
/ 08 апреля 2020

Вместо попытки сравнить два значения по смещению индекса, сохраните предыдущее значение в переменной.

Таким образом, при пропуске 142 предыдущее значение остается неизменным. Таким образом, это будет даже поддерживать массивы с несколькими последовательными 142.

Инициализировать prev первым значением, а затем начать итерацию с индекса 1.

Поскольку это ваше задание для выполнения, я не собираюсь показывать код. Надеюсь, что объяснения достаточно, чтобы вы могли завершить его самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...