Рекомендуется читать онлайн (доступ к Github в стране часто нестабильный)
Рекомендуемая синхронизация Gitee
- Введение : Этот проект представляет собой полный набор планов тестирования, призванный помочь каждому избежать обходных путей, шаг за шагом изучать алгоритмы и следовать за автором.
- Официально опубликовано : «Кодовые мысли».
- PDF-версия : PDF-версия «Code Random Notes» по алгоритмам.
- Открытый урок по алгоритму : открытый урок по алгоритму «Code Random Record».
- Сильнейшее эссе из восьми частей : Случайные мысли о коде, записывающем суть планеты знаний PDF.
- Порядок ответов на вопросы : В README установлен порядок ответов на вопросы. Вы можете отвечать на них один за другим по порядку.
- Обучающееся сообщество : вместе узнайте о навыках регистрации/прохождения собеседования/как выбрать предложение/рекомендациях крупных компаний/правилах на рабочем месте/модификации резюме/обмене технологиями/жизни программы. Добро пожаловать на планету знаний «Code Caprice».
- Отправить код : В этом проекте для объяснения используется язык C++, но уже существуют многоязычные версии, такие как Java, Python, Go, JavaScript и т. д. Спасибо всем участникам, если вы также хотите добавить код, чтобы осветить ваш аватар. , нажмите «Узнайте, как отправить свой код здесь».
- Примечание для перепечатки : все следующие статьи являются оригинальными работами меня (программиста Карла). Пожалуйста, указывайте источник при цитировании статей этого проекта. Если вы обнаружите злонамеренный плагиат или перенос, вы будете использовать законное оружие для защиты своих прав и интересов. Давайте вместе поддерживать хорошую среду технического творчества!
Руководство по чистке вопросов LeetCode
Предыстория вопроса о руководстве по чистке зубов
Многие студенты, которые только начали отвечать на вопросы, испытывают растерянность: перед ними почти 2000 вопросов по литкоду, с чего начать.
Всем кажется, что оперативность ответов на вопросы неэффективна, а время тратится в основном на три пункта:
- Найти вопросы
- Нашел вопрос, который не следует делать на данном этапе
- Не существует полного набора качественных решений проблем для справки.
На самом деле, я уже отвечал на этот вопрос раньше на Zhihu. Ответ примерно такой: массив->связанный список->хеш-таблица->строка->стек и очередь->дерево->обратное отслеживание->жадное->Динамическое программирование — > Теория графов -> Расширенные структуры данных, затем начните с простых и, ответив на несколько типов вопросов, постепенно переходите к средним и сложным вопросам.
Но я могу поставить себя на свое место и почувствовать: даже при таком общем плане новичку или даже ветерану алгоритмов очень сложно найти подходящую ему тему. Временные затраты очень велики, а тема - нет. обязательно классическая тема.
Когда дело доходит до ответов на вопросы, мы все хотим потратить как можно меньше времени на выполнение всех классических вопросов в пошаговом порядке сложности , чтобы эффективность была максимальной!
Итак, я составил руководство по прояснению вопросов по Leetcode : сверхподробный порядок ответов на вопросы . В README установлен порядок вопросов, а порядок статей — это порядок ответов на вопросы! Просто расчесывайте их один за другим, вам не придется перебирать море вопросов и выбирать темы самостоятельно!
Более того, я написал подробные решения к каждому вопросу (с картинками и текстами, а также видео по сложным моментам), а мои решения указаны на главной странице соответствующих вопросов. Качество очевидно для всех.
Итак, теперь я разобрался с порядком ответов на вопросы, чтобы помочь большему количеству студентов, изучающих алгоритмы, избежать обходных путей!
Если вы чистите Leetcode, настоятельно рекомендуется следовать порядку решения вопросов в этом руководстве. Закончив чистку, вы обнаружите, что совершили качественный скачок во всей системе знаний, и вам не придется искать. направления в море вопросов.
Последние статьи будут публиковаться первыми в паблике «Код Каприз». Сканируйте код, чтобы посмотреть, и вы обнаружите, что встречаться с вами уже поздно!
Как использовать это руководство по викторине
В соответствии с порядком расположения, упомянутым выше, просто начните чистить из массива. Порядок установлен, поэтому просто чистите по порядку.
В руководстве по чистке вопросов каждая тема в начале имеет теоретическую базовую главу. Это не теоретическое введение в стиле учебника, а краткое изложение основных знаний, необходимых для реального боя. В конце каждой темы имеется краткое изложение, которое является наиболее полным изложением темы.
Если вы опытный специалист по алгоритмам, это руководство также станет лучшим материалом для ознакомления. Если вы быстро прочитаете краткое содержание каждой серии, вам на ум придет вся система знаний об алгоритмах и различные решения.
Каждое решение здесь является шедевром и заслуживает тщательного рассмотрения .
Я постоянно использую C++ при объяснении проблем, но вы обнаружите, что почти каждое объяснение проблемы, приведенное ниже, снабжено другими языковыми версиями, такими как Java, Python, Go, JavaScript и т. д. Это код, созданный этими энтузиастами. Я также буду строго контролировать качество кода.
Таким образом, каждый может принять участие, улучшить различные языковые версии решений проблем, использовать открытый исходный код и принести пользу большему количеству друзей .
Вы готовы? Давайте начнем викторину, давай, давай!
Предисловие
множество
- Массивы слишком просты, но вы должны это знать!
- Массив: 704.Двоичный поиск.
- Массив: 27. Удаление элементов
- Массив: 977. Квадрат упорядоченного массива.
- Массив: 209. Подмассив минимальной длины.
- Массив: сумма диапазона
- Массив: Застройщик покупает землю
- Массив: 59. Спиральная матрица II.
- Массивы: сводка
связанный список
- Вот что вам следует знать о связанных списках!
- Связанный список: 203. Удаление элементов связанного списка.
- Связанный список: 707. Создать связанный список.
- Связанный список: 206. Перевернуть связанный список.
- Связанный список: 24. Попарно обменять узлы в связанном списке.
- Связанный список: 19. Удалите N-й узел внизу связанного списка.
- Связанный список: Связанный список пересекается.
- Связанный список: 142. Круговой связанный список.
- Связанный список: Резюме!
Хэш-таблица
- Что вам следует знать о хеш-таблицах!
- Хэш-таблица: 242. Допустимые анаграммы.
- Хэш-таблица: 1002. Найти общие символы.
- Хэш-таблица: 349. Пересечение двух массивов.
- Хэш-таблица: 202.Счастливое число.
- Хэш-таблица: 1. Сумма двух чисел.
- Хэш-таблица: 454. Сложение четырех чисел II
- Хэш-таблица: 383. Письмо о выкупе.
- Хэш-таблица: 15. Сумма трёх чисел
- Метод двух указателей: 18. Сумма четырех чисел.
- Хэш-таблица: сводка!
нить
- Строка: 344. Обратная строка.
- Строка: 541. Обратная строка II.
- Строка: заменить числа
- Строка: 151. Переверните слова в строке.
- Строка: правая струна
- Помочь вам тщательно изучить алгоритм KMP.
- Строка: 459. Повторяющаяся подстрока.
- Строка: Резюме!
метод двойного указателя
Метод двойного указателя в основном применяется для решения проблем с массивами, строками и связанными списками.
- Массив: 27. Удаление элементов
- Строка: 344. Обратная строка.
- Строка: заменить числа
- Строка: 151. Переверните слова в строке.
- Связанный список: 206. Перевернуть связанный список.
- Связанный список: 19. Удалите N-й узел внизу связанного списка.
- Связанный список: Связанный список пересекается.
- Связанный список: 142. Круговой связанный список.
- Двойной указатель: 15. Сумма трех чисел.
- Двойные указатели: 18. Сумма четырех чисел.
- Двойные указатели: Резюме!
Стеки и очереди
- Стеки и очереди: теоретические основы
- Стек и очередь: 232. Используйте стек для реализации очереди.
- Стек и очередь: 225. Используйте очередь для реализации стека.
- Стеки и очереди: 20. Допустимые круглые скобки.
- Стеки и очереди: 1047. Удалить все соседние дубликаты в строке.
- Стеки и очереди: 150. Обратная польская оценка выражений.
- Стеки и очереди: 239. Максимальное скользящее окно.
- Стек и очередь: 347. Топ K высокочастотных элементов
- Стеки и очереди: итоги!
Бинарное дерево
Схема классификации тем выглядит следующим образом:
- Вот что вам следует знать о двоичных деревьях!
- Двоичное дерево: рекурсивный обход двоичного дерева
- Бинарное дерево: итеративный обход бинарного дерева.
- Двоичное дерево: унифицированный метод итерации для двоичных деревьев
- Бинарное дерево: обход двоичного дерева на уровне уровня.
- Двоичное дерево: 226. Перевернуть двоичное дерево.
- Итоги этой недели! (двоичное дерево)
- Двоичное дерево: 101. Симметричное двоичное дерево.
- Бинарное дерево: 104. Максимальная глубина бинарного дерева.
- Бинарное дерево: 111. Минимальная глубина бинарного дерева.
- Бинарное дерево: 222. Количество узлов в полном бинарном дереве.
- Бинарное дерево: 110. Сбалансированное бинарное дерево.
- Бинарное дерево: 257. Все пути бинарного дерева.
- Подводим итоги этой недели! (двоичное дерево)
- Бинарное дерево: 404. Сумма левых листьев.
- Бинарное дерево: 513. Найдите значение в левом нижнем углу дерева.
- Бинарное дерево: 112. Сумма путей.
- Бинарное дерево: 106. Построить бинарное дерево.
- Бинарное дерево: 654. Максимальное бинарное дерево.
- Итоги этой недели! (двоичное дерево)
- Двоичное дерево: 617. Объединить два двоичных дерева.
- Бинарное дерево: 700. Появляется бинарное дерево поиска!
- Двоичное дерево: 98. Проверка двоичного дерева поиска.
- Бинарное дерево: 530. Минимальная абсолютная разница дерева поиска.
- Бинарное дерево: 501. Режим в бинарном дереве поиска.
- Бинарное дерево: 236. Общая проблема предков
- Итоги этой недели! (двоичное дерево)
- Бинарное дерево: 235. Поиск ближайшего общего предка дерева.
- Бинарное дерево: 701. Операция вставки в дерево поиска
- Бинарное дерево: 450. Операция удаления в дереве поиска.
- Бинарное дерево: 669. Обрезка двоичного дерева поиска
- Бинарное дерево: 108. Преобразование упорядоченного массива в двоичное дерево поиска.
- Бинарное дерево: 538. Преобразование бинарного дерева поиска в кумулятивное дерево.
- Бинарное дерево: Резюме! (Все навыки работы с бинарными деревьями, которые вам необходимо освоить, находятся здесь)
Алгоритм возврата
Схема классификации тем выглядит следующим образом:
- Вот что вам следует знать об алгоритмах возврата!
- Алгоритм поиска с возвратом: 77. Комбинация
- Алгоритм поиска с возвратом: 77. Комбинаторная оптимизация.
- Алгоритм поиска с возвратом: 216. Комбинаторная сумма III.
- Алгоритм поиска с возвратом: 17. Алфавитные комбинации телефонных номеров.
- Итоги этой недели! (Алгоритм возврата, первая серия)
- Алгоритм поиска с возвратом: 39. Комбинаторная сумма.
- Алгоритм поиска с возвратом: 40. Комбинаторная сумма II.
- Алгоритм поиска с возвратом: 131. Разбиение строки-палиндрома.
- Алгоритм возврата: 93. Восстановить IP-адрес.
- Алгоритм поиска с возвратом: 78.Subset
- Итоги этой недели! (Алгоритм обратного отслеживания, серия 2)
- Алгоритм поиска с возвратом: 90. Подмножество II.
- Алгоритм возврата: 491. Возрастающая подпоследовательность.
- Алгоритм поиска с возвратом: 46. Полная перестановка.
- Алгоритм поиска с возвратом: 47. Полная перестановка II.
- Итоги этой недели! (Алгоритм возврата, третья серия)
- Другой способ написать алгоритм обратного отслеживания для удаления дубликатов.
- Алгоритм возврата: 332. Перестроить маршрут.
- Алгоритм возврата: 51.N Queen
- Алгоритм возврата: 37. Решите судоку.
- Краткое описание алгоритма поиска с возвратом
жадный алгоритм
Схема классификации тем выглядит следующим образом:
- Что следует знать о жадных алгоритмах!
- Жадный алгоритм: 455. Раздать куки.
- Жадный алгоритм: 376. Последовательность поворотов.
- Жадный алгоритм: 53. Максимальная сумма подпоследовательности.
- Итоги этой недели! (Жадный алгоритм, серия 1)
- Жадный алгоритм: 122. Лучшее время для покупки и продажи акций II
- Жадный алгоритм: 55. Игра в прыжки.
- Жадный алгоритм: 45. Игра в прыжки II.
- Жадный алгоритм: максимальная сумма массива после 1005.K отрицаний
- Итоги этой недели! (Жадный алгоритм, серия 2)
- Жадный алгоритм: 134. Заправка.
- Жадный алгоритм: 135. Раздать конфеты.
- Жадный алгоритм: 860. Смена лимонада.
- Жадный алгоритм: 406. Восстановить очередь по высоте.
- Итоги этой недели! (Жадный алгоритм, серия 3)
- Жадный алгоритм: 406. Реконструировать очередь по высоте (продолжение)
- Жадный алгоритм: 452. Взорвать шарик минимальным количеством стрел.
- Жадный алгоритм: 435. Нет перекрывающихся интервалов.
- Жадный алгоритм: 763. Разделить интервалы между буквами.
- Жадный алгоритм: 56. Объединение интервалов
- Итоги этой недели! (Жадный алгоритм, серия 4)
- Жадный алгоритм: 738. Монотонно возрастающие числа.
- Жадный алгоритм: 968. Мониторинг двоичного дерева
- Жадный алгоритм: Резюме! (Каждое резюме должно быть классическим)
динамическое программирование
Тема динамического программирования уже началась, нет времени объяснять, друзья, садитесь в автобус и не отставайте!
- Что вам следует знать о динамическом программировании!
- Динамическое программирование: 509. Числа Фибоначчи.
- Динамическое программирование: 70. Подъем по лестнице.
- Динамическое программирование: 746. Поднимитесь по лестнице с минимальными затратами.
- Итоги этой недели! (Динамическое планирование, серия 1)
- Динамическое программирование: 62. Разные пути
- Динамическое программирование: 63. Разные пути II
- Динамическое программирование: 343. Разделение целых чисел
- Динамическое программирование: 96. Различные деревья двоичного поиска
- Итоги этой недели! (Динамическое программирование, серия 2)
Серия задач о рюкзаке:
- Динамическое программирование: 01 Теоретические основы рюкзака
- Динамическое программирование: 01 Теоретические основы рюкзака (передвижной массив)
- Динамическое программирование: 416. Разделение подмножеств Equisum
- Динамическое программирование: 1049. Вес последнего камня II
- Итоги этой недели! (Динамическое планирование, серия 3)
- Динамическое программирование: 494. Цель и
- Динамическое программирование: 474. Единицы и нули.
- Динамическое программирование: полное описание рюкзака
- Динамическое программирование: 518. Обмен изменениями II.
- Итоги этой недели! (Динамическое программирование, серия 4)
- Динамическое программирование: 377. Комбинаторная сумма IV.
- Динамическое программирование: 70. Подъем по лестнице (полная версия для рюкзака)
- Динамическое программирование: 322. Обмен изменениями.
- Динамическое программирование: 279. Совершенные квадратные числа.
- Итоги этой недели! (Динамическое программирование, серия 5)
- Динамическое программирование: 139. Разделение слов.
- Динамическое программирование: теоретические основы использования нескольких рюкзаков
- Краткое описание проблемы с рюкзаком
Серия ограблений:
- Динамическое программирование: 198. Ограбление.
- Динамическое программирование: 213. Ограбление II
- Динамическое программирование: 337. Ограбление III
Фондовая серия:
- Динамическое программирование: 121. Лучшее время для покупки и продажи акций.
- Динамическое программирование: итоги этой недели (серия 6)
- Динамическое программирование: 122. Лучшее время для покупки и продажи акций II.
- Динамическое программирование: 123. Лучшее время для покупки и продажи акций III.
- Динамическое программирование: 188. Лучшее время для покупки и продажи акций IV.
- Динамическое программирование: 309. Лучшее время для покупки и продажи акций включает период заморозки.
- Динамическое программирование: итоги этой недели (серия 7)
- Динамическое программирование: 714. Лучшее время для покупки и продажи акций, включая комиссию за обработку.
- Динамическое программирование: обзор серий акций
Серия подпоследовательности:
- Динамическое программирование: 300. Самая длинная возрастающая подпоследовательность.
- Динамическое программирование: 674. Самая длинная непрерывная возрастающая последовательность.
- Динамическое программирование: 718. Самый длинный повторяющийся подмассив.
- Динамическое программирование: 1143. Самая длинная общая подпоследовательность.
- Динамическое программирование: 1035. Непересекающиеся линии.
- Динамическое программирование: 53. Максимальная сумма подпоследовательности.
- Динамическое программирование: 392. Определение подпоследовательностей.
- Динамическое программирование: 115. Различные подпоследовательности.
- Динамическое программирование: 583. Операция удаления двух строк.
- Динамическое программирование: 72. Редактирование расстояния.
- Изменить сводку о расстоянии
- Динамическое программирование: 647. Подстрока палиндрома.
- Динамическое программирование: 516. Самая длинная подпоследовательность палиндрома.
- Краткое изложение динамического программирования
монотонный стек
- Монотонный стек: 739. Суточная температура.
- Монотонный стек: 496. Следующий больший элемент I.
- Монотонный стек: 503. Следующий больший элемент II.
- Монотонный стек: 42. Улов дождевой воды
- Монотонный стек: 84. Самый большой прямоугольник на гистограмме.
теория графов
Теория графов официально выпущена
- Теория графов: теоретические основы
- Теория графов: теоретические основы поиска в глубину
- Теория графов: все достижимые пути
- Теория графов: теоретические основы поиска в ширину
- Теория графов: версия глубокого поиска по количеству островов.
- Теория графов: версия о количестве островов в Гуансоу.
- Теория графов: максимальная площадь острова
- Теория графов: Общая площадь острова
- Теория графов: Затонувший остров
- Теория графов: задача о потоке воды
- Теория графов: строительство самого большого острова
- Теория графов: струнный пасьянс
- Теория графов: полная достижимость ориентированных графов
- Теория графов: периметр острова
- Теория графов: основы теории поиска объединений
- Теория графов: поиск путей к существованию
- Теория графов: избыточные соединения
- Теория графов: избыточные соединения II
- Теория графов: примитив минимального остовного дерева
- Теория графов: Крускал минимального остовного дерева
- Теория графов: топологическая сортировка
- Теория графов: Дейкстра (простая версия)
- Теория графов: Дейкстра (версия, оптимизированная для кучи)
- Теория графов: алгоритм Беллмана_форда
- Теория графов: алгоритм оптимизации очереди Bellman_ford (также известный как SPFA)
- Теория графов: петля с отрицательным весом суждения Беллмана Форда
- Теория графов: конечный кратчайший путь Беллмана_форда с одним источником
- Теория графов: алгоритм Флойда
- Теория графов: алгоритм A*
- Теория графов: краткое изложение алгоритма кратчайшего пути
- Теория графов: краткое изложение теории графов
(Постоянно обновляется...)
Первая десятка рейтинга
теория чисел
Классические вопросы по расширенной структуре данных
- И искать в коллекции
- минимальное связующее дерево
- Дерево сегментов
- древовидный массив
- словарное дерево
Массивная обработка данных
Дополнительные вопросы
Вышеупомянутые вопросы являются главным приоритетом. Вы должны изучить их как минимум дважды, чтобы полностью понять их. Если вы хорошо разбираетесь в вышеуказанных вопросах и все еще ищете другие вопросы для практики, вы можете изучить следующие вопросы еще раз:
Эти вопросы очень хороши, но некоторые из них похожи на руководство по чистке вопросов, а некоторые решения проблем будут дополнены позже, поэтому я не включил их в руководство по чистке вопросов. В будущем я улучшу некоторые решения проблем, а затем включу их в стратегию решения проблем.
множество
- 1365.Сколько существует чисел, меньших текущего числа?
- 941. Действительный горный массив (двойной указатель)
- 1207. Классическое применение уникального массива вхождений при хешировании
- 283. Переместить ноль [массив] [двойной указатель]
- 189. Поворот массива
- 724.Нахождение центрального индекса массива
- 34. Найти первую и последнюю позицию элемента в отсортированном массиве (метод деления пополам).
- 922. Сортировка массива по нечетному и четному II.
- 35.Поиск позиции вставки
связанный список
- 24. Попарно обменять узлы в связанном списке.
- 234. Связанный список палиндромов.
- 143. Переупорядочить связанный список [массив] [двусторонняя очередь] [непосредственно управлять связанным списком]
- 141. Круговой связанный список
- 160. Пересекающиеся связанные списки
Хэш-таблица
- 205. Изоморфные строки: [Применение хеш-таблиц]
нить
- 925. Длительное нажатие для имитации сопоставления.
- 0844. Сравнить строки, содержащие обратный пробел [симуляция стека] [двойные указатели с лучшим пространством]
Бинарное дерево
- 129. Найдите сумму чисел от корневого до листового узла.
- 1382. Преобразовать бинарное дерево поиска в сбалансированное и построить сбалансированное бинарное дерево поиска.
- 100. То же дерево имеет ту же идею, что и 101. Симметричное двоичное дерево.
- 116. Заполните указатель следующего правого узла каждого узла.
Алгоритм возврата
жадный
- 649.Dota2 Сенат – это сложно.
- 1221. Разделение сбалансированных персонажей — это просто и жадно.
динамическое программирование
- 5. Самая длинная подстрока палиндрома почти такая же, как подстрока палиндрома 647.
- 132. Разделенная строка палиндрома II очень похожа на 647. Подстроку палиндрома и 5. Самая длинная подстрока палиндрома.
- 673.Количество самых длинных возрастающих подпоследовательностей
теория графов
- 463.Периметр острова (моделирование)
- 841. Ключи и комнаты [ориентированный граф] можно использовать dfs, bfs
- 127.Словесный пасьянс Гуансу
И искать в коллекции
- 684.Резервное соединение [Основные вопросы по комбинированному поиску]
- 685. Резервное соединение II [Применение поиска объединения]
моделирование
- 657.Может ли робот вернуться в исходное положение?
- 31. Следующая аранжировка
Битовые операции
- 1356. Сортировка по количеству единиц в цифровой двоичной системе.
шаблон алгоритма
Различные базовые шаблоны алгоритмов
Автор
Нажмите здесь, чтобы просмотреть всех участников LeetCode-Master. Спасибо им за дополнение других языковых версий LeetCode-Master, чтобы больше читателей могли получить пользу от этого проекта.
Звездные Тенденции
Об авторе
Привет всем, я программист Карл, старший научный сотрудник Харбинского технологического института и автор книги «Подписи к коду». Я занимаюсь исследованием и разработкой базовых серверных технологий в Tencent и Baidu.
скачать PDF
Добавьте следующую корпоративную учетную запись WeChat, и PDF-версия будет автоматически отправлена всем. Вы также можете выбрать, присоединяться ли к группе ответов на вопросы.
Не забудьте сделать пометку при добавлении WeChat. Если вы уже работаете, отметьте: имя-город-должность. Если студент, обратите внимание: имя-школа-класс. Примечание. Если вы не представитесь, вы не сможете пройти.