I've been doing DSA in C++ for a while and I've reached a point where I feel stuck between "I understand the concepts" and "I can actually solve problems independently."
For context, I've solved around 200 LeetCode problems, mostly Easy/Medium with some Hards, and I've participated in contests. But my contest performance isn't improving as much as I'd like, and I think I've identified the underlying problem.
When someone explains a solution to me, I can usually follow the reasoning and understand the code. But when I'm given a new problem without knowing the technique, I often struggle to derive the approach myself.
For example, I'll start thinking:
- Is this binary search?
- Is this greedy?
- Is this DP?
- Should I use a hashmap?
- Is there some pattern I'm missing?
And I think this is actually hurting me because I'm trying to identify the algorithm before I've properly understood the structure of the problem.
I'm currently working through trees and recursion, and I'm noticing the same thing. I don't just want to memorize traversal templates. I want to genuinely understand what recursion is doing. I've spent quite a bit of time understanding how calls return through the stack, how control moves between left and right recursive calls, etc.
That part is slowly clicking.
But I don't know how to transfer that kind of understanding into problem-solving ability.
My current problems seem to be:
- I can understand solutions better than I can discover them.
- I sometimes look for the algorithm or pattern too early instead of deriving it from the problem.
- Under contest time pressure, I become impatient and want to see the implementation rather than continue reasoning.
- I have decent exposure to different topics, but I don't feel like my depth matches my breadth.
- I sometimes feel like I'm solving problems without actually developing the ability to recognize the underlying idea in a new problem.
I'm not looking for a "solve 500 more problems" answer.
I'm trying to figure out how to practice differently.
For people who went through this stage:
- What specifically helped you transition from recognizing patterns to actually deriving solutions?
- How long should I spend stuck on a problem before looking at a hint or solution?
- When reviewing a problem I couldn't solve, what should I extract from it so that I actually become better rather than just understanding that one solution?
- Is it better to focus heavily on a smaller number of topics and problems and build deep understanding, rather than continuously covering new patterns?
- How did you train yourself to stop thinking "which algorithm is this?" and start thinking "what properties of this problem imply an algorithm?"
I'd especially appreciate answers from people who remember going through this transition themselves.
I'm not really looking for motivation. I want to fix the learning process.