Вы когда-нибудь задумывались о том, какие проблемы можно решить, используя какие структуры данных и алгоритмы? Эта статья ответит на все ваши вопросы!
Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.
В этой статье вы найдете советы, как стать лучшим и умным программистом. Это идеально подходит как для новичков, так и для опытных программистов.
- Если вас просят найти минимальное количество шагов для достижения позиции, вы можете подумать об использовании поиска в ширину.
- Если вас спросят, существует ли путь или нет, используйте поиск в глубину или поиск в ширину.
- Если в задаче говорится о соединении разных мест, городов, узлов, позиций и т. д., очень высока вероятность того, что вы можете использовать график для представления этого.
- Если ваша проблема говорит о наличии общих подзадач, вы можете подумать об использовании динамического программирования или рекурсии с мемоизацией.
- Если вас попросят найти k самых больших элементов, использование максимальной кучи оптимизирует ваше решение. Просто добавьте все элементы данного списка или массива в максимальную кучу и извлеките их k-раз.
- Если вас попросят найти k наименьших элементов, использование минимальной кучи оптимизирует ваше решение. Просто добавьте все элементы заданного списка или массива в мини-кучу и извлеките их k-раз.
- Если вы видите проблему, содержащую N-арные деревья или двоичные деревья, использование таких методов обхода, как Inorder, PostOrder, PreOrder или Level Order Traversal, помогает решить большинство вопросов.
- Если вам дан многомерный массив или матрица, вы можете выполнить DFS или BFS для решения большинства проблем.
- Если вы работаете со связанными списками, использование отдельного списка для хранения узла или значения помогает нам сортировать список, реверсировать список и решать другие подобные задачи. Вы также можете использовать указатели для оптимизации вашего решения.
- Вы можете решить проблемы, связанные с поиском 2-Sum, либо сохранив дополнение в словаре хэш-карты, либо используя два указателя в отсортированном списке.
- Если вам дали задачу, содержащую список или массив, и вам нужно найти сумму перекрывающихся подмассивов, вы можете использовать сумму префикса, чтобы заранее сохранить сумму, или использовать динамическое программирование для оптимизации ваших решений.
- Когда вы видите вопрос, в котором используется BFS, вы всегда можете использовать deque, но при необходимости вы также можете подумать об использовании минимальной или максимальной кучи.
- Если вы хотите решить проблемы, в которых вам нужно разрешить предварительные условия, зависимости и т. Д., И решить, возможна ли операция или нет, то использование Graph и последующее определение того, имеет ли он цикл, помогает.
- Если вы хотите найти количество изолированных узлов и т. д., вы можете найти количество компонентов графика и вернуть его.
- Чтобы выяснить, можно ли превратить граф в допустимое дерево, вы можете либо обнаружить цикл, либо проверить, что количество ребер на единицу меньше, чем количество узлов, а количество компонентов равно 1.
- Если вам нужно найти элемент, выполнив определенное количество шагов (будь то фиксированное или переменное), можно использовать dfs или bfs. Пример: прыжок лягушки
- Топологическую сортировку можно использовать в задачах, состоящих из предпосылок, планирования и т. д. Любая задача, в которой сначала предпочтение отдается узлам с нулевой степенью, а затем их дочерним элементам. Другими словами, если необходимо сначала пройти родителя и только после этого можно пройти потомка, топологическая сортировка становится хорошим выбором.
- Если вы хотите найти уникальный номер в списке, вы можете взять XOR всех элементов с номером = 0 (^), как в этой задаче (https://leetcode.com/problems/single-number/) . Единственное число, оставшееся после всех операций XOR, — это уникальный элемент. Кроме того, свойство XOR состоит в том, что XOR двух одинаковых элементов всегда равен 0.
Я надеюсь, что некоторые из этих приемов помогут вам в вашем путешествии по программированию. Обратите внимание, что этот список никоим образом не является исчерпывающим, и всегда есть более оптимизированные способы решения этих проблем. В этой статье просто перечислены некоторые из множества приемов, которые могут помочь вам начать работу и стать отличным специалистом по решению проблем.
Если у вас есть какие-то приемы, которые вы считаете полезными, которых здесь нет, не стесняйтесь оставлять комментарии, чтобы все больше и больше людей могли учиться у вас!
Ставьте лайки, комментируйте и делитесь статьей, если она вам понравилась. Вы также можете подписаться на мои статьи о программировании, науке о данных, машинном обучении и НЛП.
Большое спасибо за чтение! 😊