Я пишу на сайты на nodejs, php. Когда тут возникает задача, я почти сразу нахожу решение. НО когда дело доходит до задач, типа той, что на картинке, я впадаю в ступор.
Иван Смирнов, проблема в том, что ваша задача относится скорей к спортивному/олимпиадному программированию, а вы занимаетесь прикладным программированием. Конечно, и то, и то - программирование, это всего лишь разные, иногда пересекающиеся, области.
Практиковаться, читать умные книжки по алгоритмам и структурам данных. Вот берите например https://leetcode.com/ отсортируйте по сложности (с самых легких), и делайте-делайте. Но без теории алгоритмов будут костыли, поэтому лучше почитать что-то.
тут старые правда, но запарные слегка.
Ну и тут разной сложности
По первой ссылки в конце марта еще за этот год должны выложить. Правда, там вопросы некоторые криво сформулированы и придется попотеть что бы понять задание.
Для того чтобы решить задачу нужно знать решения типовых задач - например чтобы сформировать дерево нужно применить рекурсию по связи родитель-дочерний. Входные данные это двумерный массиив 1 измерение это элементы, 2 измерения это свойства элементов. Выборка происходит по свойствам элемента. На каждую выборку 1 элемента происходит новый поиск элементов - рекурсия.
Таким образом решение задачи сводится к ее классификации и применении типового шаблона решения на конкретную задачу. Типовые шаблоны решений это и есть алгоритмы.
Знаешь все алгоритмы - умеешь решать все задачи.
Если задача большая - то она делится на подзадачи.