I recently graduated from UMass Amherst with a B.S. in Computer Science. I maintained a 4.00 GPA, and I feel like I received a very solid education in most areas of the discipline.
In my junior year, I took the Data Structures and Algorithms course. I feel that it was poorly taught. I breezed through it and understood the majority of the material. When my younger friends took the class in later semesters, they told me it was brutal, and mentioned all sorts of things that I never encountered in my class. This made me somewhat worried about the education I'd received in that class.
This worry was confirmed later on. I participated in a few algorithm competitions (TopCoder, Google Code Jam, Facebook Puzzles, and a couple others). I struggled on all but the simplest of problems. Other people seemed to be able to boil down problems and identify base algorithms and data structures very quickly. I was rarely able to pick out a base algorithm, usually trying to roll my own solution and occasionally noticing a familiar algorithm halfway through (at which point, everyone else has the problem and moved on).
Does anyone have any advice for how to rebuild my base of knowledge in this area? I know I am a strong computer scientist and have the ability to be proficient here, so I don't want to spend the rest of my career lacking in this area because of a subpar course. I know the very basic stuff (big-O, how different sorting algorithms work and their complexities, etc.), but I feel like I can't do anything practical with my knowledge.