Более 120 постоянно обновляемых интерактивных задач по программированию, основанных на тестировании , с карточками Anki.
Задачи сосредоточены на алгоритмах и структурах данных , обнаруженных в ходе собеседований по программированию .
Каждая задача имеет одно или несколько эталонных решений, которые:
Скоро в испытаниях будут предоставляться дополнительные подсказки, которые помогут вам найти оптимальное решение.
В блокнотах также подробно описано:
Также включены эталонные реализации различных структур данных и алгоритмов, прошедшие модульное тестирование .
В предоставленной колоде карточек Anki используются интервальные повторения, чтобы помочь вам запомнить ключевые понятия.
Отлично подходит для использования в дороге.
Ищете ресурсы, которые помогут вам подготовиться к собеседованиям по системному проектированию и объектно-ориентированному проектированию ?
Ознакомьтесь с родственным репозиторием The System Design Primer, который содержит дополнительные колоды Anki:
Для каждой задачи есть две записные книжки: записная книжка с модульными тестами, которые вам предстоит решить, и записная книжка с решениями для справки.
Формат : Категория испытания – Количество испытаний.
Общее количество испытаний: 120
Протестированные модульные полнофункциональные реализации следующих структур данных:
Протестированные модульные полнофункциональные реализации следующих алгоритмов:
Авторы изображений
Испытание | Статический блокнот |
---|---|
Определить, содержит ли строка уникальные символы | Задача │ Решение |
Определить, является ли строка перестановкой другой | Задача │ Решение |
Определить, является ли строка вращением другой | Задача │ Решение |
Сжать строку | Задача │ Решение |
Перевернуть символы в строке | Задача │ Решение |
Учитывая две строки, найдите один разный символ | Задача │ Решение |
Найдите два индекса, сумма которых равна определенному значению. | Задача │ Решение |
Реализация хеш-таблицы | Задача │ Решение |
Внедрить шипучую шумиху | Задача │ Решение |
Найти первый неповторяющийся символ в строке | Внести вклад │ Внести вклад |
Удалить указанные символы в строке | Внести вклад │ Внести вклад |
Перевернуть слова в строке | Внести вклад │ Внести вклад |
Преобразовать строку в целое число | Внести вклад │ Внести вклад |
Преобразовать целое число в строку | Внести вклад │ Внести вклад |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статический блокнот |
---|---|
Удаление дубликатов из связанного списка | Задача │ Решение |
Найдите элемент связанного списка от k-го до последнего. | Задача │ Решение |
Удалить узел в середине связанного списка | Задача │ Решение |
Разделить связанный список вокруг заданного значения | Задача │ Решение |
Сложите два числа, цифры которых хранятся в связанном списке. | Задача │ Решение |
Найдите начало цикла связанного списка | Задача │ Решение |
Определить, является ли связанный список палиндромом | Задача │ Решение |
Реализация связанного списка | Задача │ Решение |
Определить, является ли список циклическим или ациклическим | Внести вклад │ Внести вклад |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статический блокнот |
---|---|
Реализуйте n стеков, используя один массив | Задача │ Решение |
Реализуйте стек, который отслеживает минимальный элемент. | Задача │ Решение |
Реализуйте класс набора стеков, который обертывает список стеков с ограниченной емкостью. | Задача │ Решение |
Реализация очереди с использованием двух стеков | Задача │ Решение |
Сортировка стека, используя другой стек в качестве буфера | Задача │ Решение |
Реализация стека | Задача │ Решение |
Реализация очереди | Задача │ Решение |
Реализуйте приоритетную очередь, поддерживаемую массивом | Задача │ Решение |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статические ноутбуки |
---|---|
Реализация поиска в глубину (предварительный, внутренний и постпорядковый) в дереве. | Задача │ Решение |
Реализуйте поиск в ширину по дереву | Задача │ Решение |
Определить высоту дерева | Задача │ Решение |
Создайте двоичное дерево поиска минимальной высоты из отсортированного массива. | Задача │ Решение |
Создайте связанный список для каждого уровня двоичного дерева. | Задача │ Решение |
Проверьте, сбалансировано ли двоичное дерево | Задача │ Решение |
Определите, является ли дерево допустимым двоичным деревом поиска. | Задача │ Решение |
Найдите по порядку преемника данного узла в двоичном дереве поиска. | Задача │ Решение |
Найдите второй по величине узел в бинарном дереве поиска. | Задача │ Решение |
Найдите наименьшего общего предка | Задача │ Решение |
Инвертировать двоичное дерево | Задача │ Решение |
Реализация двоичного дерева поиска | Задача │ Решение |
Реализация минимальной кучи | Задача │ Решение |
Реализация попытки | Задача │ Решение |
Реализация поиска в глубину на графике | Задача │ Решение |
Реализация поиска в ширину на графе | Задача │ Решение |
Определить, существует ли путь между двумя узлами графа | Задача │ Решение |
Реализация графика | Задача │ Решение |
Найдите порядок сборки по списку проектов и зависимостей. | Задача │ Решение |
Найдите кратчайший путь во взвешенном графе. | Задача │ Решение |
Найдите кратчайший путь в невзвешенном графе. | Задача │ Решение |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статические ноутбуки |
---|---|
Реализация сортировки выбором | Задача │ Решение |
Реализовать сортировку вставкой | Задача │ Решение |
Реализуйте быструю сортировку | Задача │ Решение |
Реализовать сортировку слиянием | Задача │ Решение |
Реализовать поразрядную сортировку | Задача │ Решение |
Отсортируйте массив строк так, чтобы все анаграммы находились рядом друг с другом. | Задача │ Решение |
Найти элемент в отсортированном повернутом массиве | Задача │ Решение |
Поиск элемента в отсортированной матрице | Задача │ Решение |
Найдите целое число, которого нет во входных данных из n целых чисел | Задача │ Решение |
Учитывая отсортированные массивы A, B, объедините B в A в отсортированном порядке. | Задача │ Решение |
Реализация стабильной сортировки выбором | Внести вклад │ Внести вклад |
Сделать нестабильную сортировку стабильной | Внести вклад │ Внести вклад |
Внедрить эффективную версию быстрой сортировки на месте. | Внести вклад │ Внести вклад |
Учитывая два отсортированных массива, объедините один в другой в отсортированном порядке. | Внести вклад │ Внести вклад |
Найдите элемент в повернутом и отсортированном массиве целых чисел | Внести вклад │ Внести вклад |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статические ноутбуки |
---|---|
Реализуйте Фибоначчи рекурсивно, динамически и итеративно. | Задача │ Решение |
Максимальное количество предметов, помещенных в рюкзак | Задача │ Решение |
Максимизируйте неограниченное количество предметов, помещенных в рюкзак | Задача │ Решение |
Найдите самую длинную общую подпоследовательность | Задача │ Решение |
Найдите самую длинную возрастающую подпоследовательность | Задача │ Решение |
Минимизируйте затраты на умножение матриц | Задача │ Решение |
Максимизировать цены на акции при условии k транзакций | Задача │ Решение |
Найдите минимальное количество способов представить n центов в массиве монет. | Задача │ Решение |
Найдите уникальное количество способов представить n центов в массиве монет. | Задача │ Решение |
Выведите все допустимые комбинации n-пар круглых скобок. | Задача │ Решение |
Перемещение по лабиринту | Задача │ Решение |
Распечатать все подмножества набора | Задача │ Решение |
Распечатать все перестановки строки | Задача │ Решение |
Найдите магический индекс в массиве | Задача │ Решение |
Найдите количество способов пробежать n шагов. | Задача │ Решение |
Реализовать Ханойские башни с 3 башнями и N дисками. | Задача │ Решение |
Реализуйте факториал рекурсивно, динамически и итеративно. | Внести вклад │ Внести вклад |
Выполните двоичный поиск в отсортированном массиве целых чисел. | Внести вклад │ Внести вклад |
Распечатать все комбинации строки | Внести вклад │ Внести вклад |
Реализация функции заливки краской | Внести вклад │ Внести вклад |
Найдите все перестановки, представляющие n центов, учитывая монеты номиналом 1, 5, 10, 25 центов. | Внести вклад │ Внести вклад |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статические ноутбуки |
---|---|
Создать список простых чисел | Задача │ Решение |
Найдите цифровой корень | Задача │ Решение |
Создайте класс, поддерживающий вставку, максимальный, минимальный, средний режим в O (1) | Задача │ Решение |
Определить, является ли число степенью двойки | Задача │ Решение |
Сложите два числа без знака + или -. | Задача │ Решение |
Вычесть два числа без знака + или – | Задача │ Решение |
Проверить, является ли число простым | Внести вклад │ Внести вклад |
Определите, пересекаются ли две прямые на декартовой плоскости. | Внести вклад │ Внести вклад |
Используя только сложение, реализуйте умножение, вычитание и деление для целых чисел. | Внести вклад │ Внести вклад |
Найдите k-е число такое, что единственными простыми делителями являются 3, 5 и 7. | Внести вклад │ Внести вклад |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статические ноутбуки |
---|---|
Реализуйте общие операции манипулирования битами. | Задача │ Решение |
Определите количество битов, которые необходимо перевернуть, чтобы преобразовать a в b. | Задача │ Решение |
Нарисовать линию на экране | Задача │ Решение |
Немного переверните, чтобы максимизировать самую длинную последовательность из 1 с. | Задача │ Решение |
Получите следующее по величине и следующее по наименьшему числу | Задача │ Решение |
Объединить два двоичных числа | Задача │ Решение |
Поменять местами нечетные и четные биты в целом числе | Задача │ Решение |
Распечатайте двоичное представление числа от 0 до 1. | Задача │ Решение |
Определить количество единиц в двоичном представлении данного целого числа. | Внести вклад │ Внести вклад |
Добавить вызов | Внести вклад │ Внести вклад |
Испытание | Статические ноутбуки |
---|---|
Найдите самую длинную подстроку, содержащую не более k различных символов. | Задача │ Решение |
Найдите наибольшее произведение трех чисел | Задача │ Решение |
Максимизируйте прибыль от акций от 1 покупки и 1 продажи. | Задача │ Решение |
Переместить все нули в списке в конец | Задача │ Решение |
Найдите произведения всех остальных int | Задача │ Решение |
Учитывая список входов и выходов, найдите самый загруженный период. | Задача │ Решение |
Определить периметр острова | Задача │ Решение |
Форматировать лицензионные ключи | Задача │ Решение |
Найдите самый длинный абсолютный путь к файлу | Задача │ Решение |
Объединение диапазонов кортежей | Задача │ Решение |
Назначить файлы cookie | Задача │ Решение |
Определите, сможете ли вы выиграть в Ниме | Задача │ Решение |
Проверьте, мог ли журнал быть использован для создания записки о выкупе | Задача │ Решение |
Найдите, сколько раз предложение может поместиться на экране. | Задача │ Решение |
Утопическое дерево | Задача │ Решение |
Максимизация xor | Задача │ Решение |
Добавить вызов | Внести вклад │ Внести вклад |
interactive-coding-challenges # Repo
├─ arrays_strings # Category of challenges
│ ├─ rotation # Challenge folder
│ │ ├─ rotation_challenge.ipynb # Challenge notebook
│ │ ├─ rotation_solution.ipynb # Solution notebook
│ │ ├─ test_rotation.py # Unit test*
│ ├─ compress
│ │ ├─ compress_challenge.ipynb
│ │ ├─ compress_solution.ipynb
│ │ ├─ test_compress.py
│ ├─ ...
├─ linked_lists
│ ├─ palindrome
│ │ └─ ...
│ ├─ ...
├─ ...
*Записные книжки (.ipynb) читают/записывают связанный файл модульного теста (.py).
Этот README содержит ссылки на Binder, который размещает в Интернете динамические блокноты с содержимым репозитория без необходимости установки.
Бегать:
pip install jupyter
Подробные инструкции, сценарии и инструменты для более оптимальной настройки среды разработки можно найти в репозитории dev-setup.
Для получения более подробной информации об установке ноутбука следуйте инструкциям здесь.
Дополнительную информацию о блокнотах IPython/Jupyter можно найти здесь.
Задания предоставляются в виде блокнотов IPython/Jupyter и протестированы с использованием Python 2.7 и Python 3.x.
Если вам необходимо установить IPython/Jupyter Notebook, см. раздел «Установка ноутбука».
Запустите блокнот испытаний:
$ git clone https://github.com/donnemartin/interactive-coding-challenges.git
$ cd interactive-coding-challenges
$ jupyter notebook
Откроется ваш веб-браузер со списком категорий испытаний:
Чтобы отладить свое решение с помощью pdb, обратитесь к следующему билету.
Примечание. Если ваше решение отличается от решений, перечисленных в «Блокноте решений», рассмотрите возможность отправки запроса на включение, чтобы другие могли воспользоваться вашей работой. Подробности см. в Руководстве по участию.
Проблемы, решения и модульные тесты представлены в виде блокнотов IPython/Jupyter .
Вклады приветствуются!
Ознакомьтесь с Руководством по участию, чтобы узнать, как:
Не стесняйтесь обращаться ко мне, чтобы обсудить любые проблемы, вопросы или комментарии.
Мою контактную информацию можно найти на моей странице GitHub.
Я предоставляю вам код и ресурсы из этого репозитория под лицензией с открытым исходным кодом. Поскольку это мой личный репозиторий, лицензия, которую вы получаете на мой код и ресурсы, принадлежит мне, а не моему работодателю (Facebook).
Copyright 2015 Donne Martin
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.