Я студент ECE из IIIT - Аллахабад (2019–2023). Я шестизвездочный программист Codechef (2257) и эксперт Codeforces (1622). Я проходил летнюю стажировку (май 2022 г. — июль 2022 г.) в Oracle.

Я начал DSA во 2-м семестре моего колледжа. Сначала я изучил язык C++, так как уже был знаком с C. Сначала большую часть времени я тратил на изучение того, что и откуда изучать. Потом я начал решать вопросы на hackerearth, тогда я даже не умел решать простые задачи. Раньше я применял самую простую грубую силу, которую мог, и из-за этого все мои решения приводили к TLE. Я помню, что начал с 1-го массива тем и не смог решить самый простой вопрос на Hackerearth для массива. Затем, увидев одно решение, я узнал, что в C++ есть что-то вроде STL, я зашел на разные сайты и прочитал о STL столько, сколько мог. Это очень помогло мне в написании более короткого кода. Решил около 200 задач на Hackerearth разной тематики и сложности. Hackerearth содержит список всех важных структур данных и алгоритмов, что действительно полезно.

Потом один мой друг предложил мне проводить конкурсы на Codechef и Codeforces. Когда я начал проводить конкурсы на этих платформах, я не смог решить более 1/2 вопросов. Временами это так демотивировало, что я не могу решать вопросы в конкурсах. Но после каждого конкурса я просматривал передовицу всех вопросов, и каждый раз, когда я видел структуру данных или алгоритм, о которых я не знал, я заходил на Hackerearth/Cp Algorithms/Youtube/GFG, читал об этом и пробовал. реализовать его самостоятельно впоследствии. Вот как я узнал о стольких новых темах в соревновательном программировании. По моему это необходимо, если кто-то хочет улучшить свой рейтинг и стать лучше. В конце концов, после проведения множества конкурсов, я смог решать вопросы в конкурсах.

Я также решил много вопросов по Leetcode, GFG и Interviewbit. Codechef и CF помогли мне улучшить быстроту мышления и написать более качественный и оптимизированный код, эти 3 сайта помогли мне улучшить логику DSA, что важно для собеседований. Моя стратегия для этих сайтов была проста: выберите тему, которую я хочу решить, затем идите и решайте простые, средние и сложные вопросы по этой теме (типичное соотношение количества вопросов, по моему мнению, будет 3: 5: 2). После решения любого вопроса я обычно просматривал редакционные и лучшие ответы на этот вопрос, чтобы узнать об оптимизированных / лучших / быстрых способах и методах решения вопроса.

Теперь занятия Codechef и Codeforces не важны для прохождения собеседований, но они научили меня, как быстрее думать в условиях стресса и писать наиболее оптимизированное решение для заданного вопроса. Их конкурсы выглядят как пародийные онлайн-оценки и интервью для компаний. Кроме того, их рейтинг помогает получать рекомендации для компаний, основанных на продуктах.

Темы размещения:-

  1. Структуры данных: массив, матрицы, стек, очередь, HashMap, LinkedList, деревья, приоритетная очередь, график, Trie, DSU.
  2. Алгоритмы: двоичный поиск, алгоритмы сортировки, KMP, алгоритм Рабина Карпа, Z-алгоритм, манипулирование битами, жадность, рекурсия, возврат с возвратом, динамическое программирование, DFS, BFS, Bellman Ford, Djikstra, алгоритм Prims, алгоритм Kruskal, топоогическая сортировка, алгоритм Floyd Warshall , Гамильтонов цикл.
  3. Расширенные структуры данных (для таких компаний, как Media.net, Uber, Codenation): дерево сегментов, дерево Фенвика, самобалансирующиеся деревья.

Советы :-

  1. Всегда читайте вопрос дважды, чтобы понять каждое требование вопроса.
  2. Всегда смотрите редакционную и лучшую заявку на вопрос, который вы решили. Таким образом, вы всегда будете узнавать что-то новое.
  3. Если вы не можете решить конкретный вопрос, оставьте его на какое-то время, а затем вернитесь к нему позже и посмотрите, сможете ли вы сейчас. если вы все еще не понимаете, прочитайте редакционную статью и решите больше вопросов, связанных с этой темой.
  4. Не расстраивайтесь из-за того, что изначально плохо выступали в конкурсах. Мне потребовалось более 50 конкурсов, чтобы стать экспертом в Codeforces.
  5. Важно делать заметки.
  6. Быть последовательным важнее.

Ресурсы для обучения:-

  1. ГФГ
  2. СР-алгоритмы
  3. Хакерзем
  4. Каналы Youtube (Luv, Striver, Aditya Verma, mycodeschool и т. д.)