TIL: По определенным причинам 🥁 Однажды я сделал вызов кодирования на Codility, и теперь я хочу поделиться с вами своими подходами.


Оглавление

  1. Задача
  2. Подход 1: цикл For
  3. Подход 2: Map-функция
  4. Подход 3: Установить


Задача

Напишите функцию: function solution(A); что, учитывая массив A из


Н\mathbb{N}


целые числа, возвращает наименьшее положительное целое число (больше 0), которое не встречается в A.

Например, учитывая A = [1, 3, 6, 4, 1, 2]функция должна вернуть 5.

Данный A = [1, 2, 3]функция должна вернуть 4.

Данный A = [−1, −3]функция должна вернуть 1.

Напишите эффективный алгоритм для следующих предположений:


Н

\mathbb{N}


является целым числом в диапазоне [1..100,000]; каждый элемент массива A является целым числом в диапазоне [−1,000,000..1,000,000].

Подход 1: цикл For

Для первого решения мы будем использовать цикл for.

Шаг 1: Во-первых, мы фильтруем массив (который возвращает новый массив), чтобы получить только положительные целые числа, потому что, когда в массиве только отрицательные целые числа, ответ всегда должен возвращаться 1.

Шаг 2: Затем мы сортируем новый массив в порядке возрастания.

Шаг 3: Теперь давайте создадим переменную с именем xкоторый хранит 1 как значение по причине, упомянутой ранее (наименьший возможный возврат равен 1).

Шаг 4: Создайте цикл for. Цикл for проверяет, больше ли число в массиве, чем xа когда оно есть, то у нас уже есть решение 1.

Шаг 5: В противном случае давайте обновим x на число, с которым оно сравнивалось, увеличилось на 1.

Шаг 6: Когда цикл for завершится, вернитесь x.


Подход 2: Map-функция

Для второго решения мы будем использовать функцию карты.

Шаг 1: Мы создаем переменную с именем x как мы делали в Подход 1 Шаг 3.

Шаг 2: Мы используем filter() как мы делали в Подход 1 Шаг 1.

Шаг 3: Тогда давайте использоватьsort() как мы делали в Подход 1 Шаг 2.

Шаг 4: Теперь мы собираемся использовать map(). map() также создает новый массив, вызывая предоставленную функцию для каждого элемента в массиве.

Шаг 5: В пределах map() мы снова проверяем, если xменьше, чем текущее число в массиве, и вернуть его. (Ярлык: если return находится в той же строке if statementнет необходимости в {} и он вернется x.)

Шаг 6: В противном случае x будет обновлен на число, с которым оно сравнивалось, увеличено на 1.

Шаг 7: Когда функциональность x возвращается.

function solution(A) {
    let x = 1

    A.filter(x => x >= 1)
     .sort((a, b) => a - b)
     .map((val, i, arr) => {
        if(x < arr[i]) return 
        x = arr[i] + 1
    })
    return x
}

console.log(`The solution is ${solution2([-1, 3, 8, 6, 1, 2])}`);
Войти в полноэкранный режим

Выйти из полноэкранного режима


Подход 3: Установить

Для последнего решения мы будем использовать set() метод.

Шаг 1: Создайте переменную с именем setи сохраните новый экземпляр Set() с массивом.

Шаг 2: Еще раз, давайте создадим переменную с именем xкоторый хранит 1 как значение по причине, упомянутой ранее (наименьший возможный возврат равен 1).

Шаг 3: Мы используем while loop который перебирает набор и смотрит, set имеет i в этом. Пока это так, i будет увеличен на 1 до тех пор, пока значение i нет в наборе, то i будет возвращен.

function solution(A) {
  const set = new Set(A);
  let i = 1;

  while (set.has(i)) {
    i++;
  }
  return i;
}

console.log(`The solution is ${solution3([1, 8, 6, 1, 2])}`);
Войти в полноэкранный режим

Выйти из полноэкранного режима

Найдите здесь Ссылка на ручку на CodePen.


Спасибо

Спасибо за ваше чтение и время. Я очень ценю это!