Вы когда-нибудь задумывались о том, какие проблемы можно решить, используя какие структуры данных и алгоритмы? Эта статья ответит на все ваши вопросы!

Больше контента на plainenglish.io. Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Получите эксклюзивный доступ к возможностям написания и советам в нашем сообществе Discord.

В этой статье вы найдете советы, как стать лучшим и умным программистом. Это идеально подходит как для новичков, так и для опытных программистов.

  1. Если вас просят найти минимальное количество шагов для достижения позиции, вы можете подумать об использовании поиска в ширину.
  2. Если вас спросят, существует ли путь или нет, используйте поиск в глубину или поиск в ширину.
  3. Если в задаче говорится о соединении разных мест, городов, узлов, позиций и т. д., очень высока вероятность того, что вы можете использовать график для представления этого.
  4. Если ваша проблема говорит о наличии общих подзадач, вы можете подумать об использовании динамического программирования или рекурсии с мемоизацией.
  5. Если вас попросят найти k самых больших элементов, использование максимальной кучи оптимизирует ваше решение. Просто добавьте все элементы данного списка или массива в максимальную кучу и извлеките их k-раз.
  6. Если вас попросят найти k наименьших элементов, использование минимальной кучи оптимизирует ваше решение. Просто добавьте все элементы заданного списка или массива в мини-кучу и извлеките их k-раз.
  7. Если вы видите проблему, содержащую N-арные деревья или двоичные деревья, использование таких методов обхода, как Inorder, PostOrder, PreOrder или Level Order Traversal, помогает решить большинство вопросов.
  8. Если вам дан многомерный массив или матрица, вы можете выполнить DFS или BFS для решения большинства проблем.
  9. Если вы работаете со связанными списками, использование отдельного списка для хранения узла или значения помогает нам сортировать список, реверсировать список и решать другие подобные задачи. Вы также можете использовать указатели для оптимизации вашего решения.
  10. Вы можете решить проблемы, связанные с поиском 2-Sum, либо сохранив дополнение в словаре хэш-карты, либо используя два указателя в отсортированном списке.
  11. Если вам дали задачу, содержащую список или массив, и вам нужно найти сумму перекрывающихся подмассивов, вы можете использовать сумму префикса, чтобы заранее сохранить сумму, или использовать динамическое программирование для оптимизации ваших решений.
  12. Когда вы видите вопрос, в котором используется BFS, вы всегда можете использовать deque, но при необходимости вы также можете подумать об использовании минимальной или максимальной кучи.
  13. Если вы хотите решить проблемы, в которых вам нужно разрешить предварительные условия, зависимости и т. Д., И решить, возможна ли операция или нет, то использование Graph и последующее определение того, имеет ли он цикл, помогает.
  14. Если вы хотите найти количество изолированных узлов и т. д., вы можете найти количество компонентов графика и вернуть его.
  15. Чтобы выяснить, можно ли превратить граф в допустимое дерево, вы можете либо обнаружить цикл, либо проверить, что количество ребер на единицу меньше, чем количество узлов, а количество компонентов равно 1.
  16. Если вам нужно найти элемент, выполнив определенное количество шагов (будь то фиксированное или переменное), можно использовать dfs или bfs. Пример: прыжок лягушки
  17. Топологическую сортировку можно использовать в задачах, состоящих из предпосылок, планирования и т. д. Любая задача, в которой сначала предпочтение отдается узлам с нулевой степенью, а затем их дочерним элементам. Другими словами, если необходимо сначала пройти родителя и только после этого можно пройти потомка, топологическая сортировка становится хорошим выбором.
  18. Если вы хотите найти уникальный номер в списке, вы можете взять XOR всех элементов с номером = 0 (^), как в этой задаче (https://leetcode.com/problems/single-number/) . Единственное число, оставшееся после всех операций XOR, — это уникальный элемент. Кроме того, свойство XOR состоит в том, что XOR двух одинаковых элементов всегда равен 0.

Я надеюсь, что некоторые из этих приемов помогут вам в вашем путешествии по программированию. Обратите внимание, что этот список никоим образом не является исчерпывающим, и всегда есть более оптимизированные способы решения этих проблем. В этой статье просто перечислены некоторые из множества приемов, которые могут помочь вам начать работу и стать отличным специалистом по решению проблем.

Если у вас есть какие-то приемы, которые вы считаете полезными, которых здесь нет, не стесняйтесь оставлять комментарии, чтобы все больше и больше людей могли учиться у вас!

Ставьте лайки, комментируйте и делитесь статьей, если она вам понравилась. Вы также можете подписаться на мои статьи о программировании, науке о данных, машинном обучении и НЛП.

Большое спасибо за чтение! 😊