всем привет, я с 15 лет занимаюсь программированием, пробовал все, остановился на бэке, щас мне 20 лет и я работаю на свой универ бэкэнд разрабом, весь свой путь делал всякие пет проекты и изучал технологии. всегда были проблемы с решением алгоритмических задач на олимпиадах или задач на сайтах по типу leetcode, codewars, на последнем сайте у меня 483 очка, на первом очень сложно решать задачки. вот недавно захотел устроиться в школу бэкенда в яндексе и не прошел две тестовые задачки уровня ease. с математикой у меня вся было средне иногда даже ниже среднего. вот можете посоветовать книги, курсы или какую нибудь методику чтобы влиться в эту тему может свой опыт расскажете? хочется научиться понимать когда какой алгоритм использовать и придумывать сами алгоритмы.
Вас спасет только насмотренность.
Если не знаете как решить олимпиадную задачу, то ищете похожую из того же класса с решением.
В решение вставляете, где можете, вывод отладки по переменным массивов, счетчиков и так далее.
С бумажкой и карандашом пытаетесь интерпретировать отладочные данные на рисунке.
И так пару сотен задач каждого класса.
PS: Если вы не собираетесь разрабатывать низкоуровневую логику, например, в видеокодеках, фильтры для фотошопа и т.д., то в жизни методы решения олимпиадных задач никогда не пригодятся.
Тут поможет только практика. Чтобы научиться решать задачи - надо много задач решить. Если не можете какую-то задачу решить сами, читайте разбор или чужие решения, пока не поймете, что там происходит. И потом обязательно реализуйте решение сами, не перепечатывая готовое.
Хорошие книги: Кнут "искусство програмирования", Кормен "алгоритмы. Построение и анализ", Бхаргава "Грокаем алгоритмы". Старайтесь прорешивать все упражнения в этих книгах. Но прочитав их вы задачи решать не научитесь, а лишь подтянете базу.
Если ты в принципе не знаешь, как сделать ту или иную задачу, если твой алгоритм не верно её считает, то тут вряд ли чем можно помочь. Это как 3D-мышление, умение ориентироваться на местности или умение писать стихи. У кого-то это есть, у кого-то нет. Научиться этому почти нереально.
Если же твои алгоритмы считают верно, но медленно и неоптимально, то тут можно работать над собой. Изучать алгоритмическую сложность. Чтобы с первого взгляда отличать O(N^2) от O(N*logN) и т.п. И не только отличать, но и чувствовать, где какой сложности можно добиться.